1.Android中的联系人都保存在一个SQLite数据库中,路径为:/data/data/com.android.providers.contacts/databases/contacts2.db
第一层,Contact,即ContactContract.Contacts,是整合的联系人信息。
第二层,RawConact,即ContactContract.RawContacts,记录的是该联系人来自某信息源的信息,例如本地输入的,来自Google的,从微软Exchange中导出的,或则来自某个社交网站的信息。每个RawContact记录的信息都来自同一信息源。
第三层,Data,即ContactContract.Data,是具体的信息存储,例如记录联系人姓名,email信息,家庭电话,手机电话信息等等,每一个Data都存放一个具体的信息。在Data中的MIME TYPE说明存储信息的类型。具体在ContactContract.CommonDataKinds中定义。每个Data中有DATA1-DATA15个字段来存储信息,各字段所代表的含义,也可以在CommonDataKinds中具体查到。
2.遍历联系人
String resultStr = "";
//得到contentresolver对象
ContentResolver contentResolver = getContentResolver();
//取得电话本中光标,
//PhoneLookup.DISPLAY_NAME
//ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"//英文排在汉字拼音前面
String sortOrder="sort_key_alt";//汉字的拼音和英文同等排序
Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, sortOrder);
//先moveToNext()
while(cursor.moveToNext())
{
//联系人的名字
String contactName = cursor.getString( cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME));
resultStr += (contactName +":");
//联系人的ID
String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
//查询该位联系人的电话号码,类似的可以查询email,photo
Cursor phoneCursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null);//第一个参数是确定查询电话号,第三个参数是查询具体某个人的过滤值
//一个人可能有几个号码
while(phoneCursor.moveToNext())
{
String strPhoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
resultStr += (strPhoneNumber+" ");
}
resultStr+="\n";
phoneCursor.close();
}
cursor.close();
3.
Android联系人数据库全解析
http://cruiserzpt99.blog.163.com/blog/static/665249282012740349641/
2.新增联系人
Android简单联系人操作
http://blog.csdn.net/fwwdn/article/details/7547408
头像
http://www.devdiv.com/forum.php?mod=viewthread&tid=125410
来电拒接
http://hi.baidu.com/huangbz321/blog/item/0059fa228cd9754b9922ed23.html
ITelephony.aidl文件内容可以在http://www.netmite.com/android/mydroid/1.5/frameworks/base/telephony/java/com/android/internal/telephony/ITelephony.aidl 或者
找到,这个方法适合没有SDK源码文件的开发者
3. Intent跳转到系统应用中的拨号界面、联系人界面、短信界面及其他
http://blog.csdn.net/aomandeshangxiao/article/details/6938729
4. 向 Android 模拟器打电话和发短消息
http://www.cnmsdn.com/html/201004/1271831973ID4101.html
android 模拟器 之 玩转篇(一)
http://blog.csdn.net/bill830711/article/details/5321158
5.[Android] 来电归属地查询的实现思路
http://blog.csdn.net/sam_zhang1984/article/details/7212289
http://blog.sina.com.cn/s/blog_8f5825750100yma5.html
更新联系人电话的相关问题
http://bbs.51cto.com/archiver/tid-872132.html
http://blog.csdn.net/flowingflying/article/details/7497307
http://hubingforever.blog.163.com/blog/static/171040579201042262729963/
http://www.haoni.org/2011/04/15/androidcontactscontractyanjiu/
http://linyongxiao.blog.163.com/blog/static/18293633020122674255277/
//private SmsContentObserver smsContentObserver;//能修改短信为已读,但是阻止不了系统通知。
//private boolean testsms;
class SmsContentObserver extends ContentObserver
{
private Cursor cursor = null;
public SmsContentObserver(Handler handler)
{
super(handler);
}
/**
* @Description 当短信表发送改变时,调用该方法
* 需要两种权限
* android.permission.READ_SMS读取短信
* android.permission.WRITE_SMS写短信
* @Author Snake
* @Date 2010-1-12
*/
@Override
public void onChange(boolean selfChange)
{
super.onChange(selfChange);
Log.i("ContentObserver","onChange "+selfChange);
/*
//读取收件箱中指定号码的短信
Uri uri=Uri.parse("content://sms/inbox");
cursor = managedQuery(uri,
new String[]{"_id", "address", "read"}, " address=? and read=?",
new String[]{"10086", "0"}, "date desc");
if (cursor != null)
{
ContentValues values = new ContentValues();
values.put("read", "1"); //修改短信为已读模式
cursor.moveToFirst();
while (cursor.isLast())
{
//更新当前未读短信状态为已读
int ret=getContentResolver().update(uri, values, " _id=?", new String[]{""+cursor.getInt(0)});
String msg=String.format("id=%d,address=%s,read=%d,update=%d",cursor.getInt(0),cursor.getString(1),cursor.getInt(2),ret);
Log.i("SmsContentObserver",msg);
cursor.moveToNext();
}
}
*/
}
}// end class SmsContent
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,long id)
{
switch(position)
{
/*
case 0:
{
if(testsms)
{
stringArray[0]="开启监听短信(已关闭)";
this.getContentResolver().unregisterContentObserver(smsContentObserver);
}
else
{
stringArray[0]="关闭监听短信(已开启)";
//注册短信变化监听
if(smsContentObserver==null)
{
smsContentObserver = new SmsContentObserver(new Handler());
}
//Uri uri=Uri.parse("content://sms/");
Uri uri=ContactsContract.Contacts.CONTENT_URI;
this.getContentResolver().registerContentObserver(uri, true, smsContentObserver);
}
testsms=!testsms;
adapter.notifyDataSetChanged();
}
break;
*/
【Android】短信应用——短信截获
http://blog.csdn.net/etzmico/article/details/7317892