您的位置:首页 > 移动开发 > Android开发

获取Android系统的联系人信息

2015-08-08 19:24 399 查看
1.先添加2条联系人(因虚拟机里的联系人为空)



2.导出联系人的数据库(data/data/)



3.查看系统的联系人数据库主要3张表,得出它们关系如图:



4.ContactsProvider在AndroidManifest.xml的配置如图



下面进行代码实现:
<span style="font-size:12px;">package com.example.contactdb;

import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

public void contactdata(View view) {
ContentResolver cr = getContentResolver();
Uri contactUri = Uri
.parse("content://com.android.contacts/raw_contacts");
Uri dataUri = Uri.parse("content://com.android.contacts/data");
Cursor contactcursor = cr.query(contactUri, null, null, null, null);
while (contactcursor.moveToNext()) {
String id = contactcursor.getString(contactcursor
.getColumnIndex("contact_id"));
System.out.println("id---" + id);
Cursor datacursor = cr.query(dataUri, null, "contact_id=?",
new String[] { id }, null);
// 小技巧:测试data表的结果集,可知并没有mimetype_id字段只有mimetype字段
// String[] strname = datacursor.getColumnNames();
// for (int i = 0; i < strname.length; i++) {
// System.out.println("Names---" + strname[i]);
// }
while (datacursor.moveToNext()) {
String mimetype = datacursor.getString(datacursor
.getColumnIndex("mimetype"));
String data1 = datacursor.getString(datacursor
.getColumnIndex("data1"));
System.out.println("data1---" + mimetype);
System.out.println("data1---" + data1);
}
datacursor.close();
}
contactcursor.close();
}
}
</span>


1.新建读取联系人信息的应用
2.通过系统的ContentProvider提供ContentResolver获取(因系统的数据库为私有)
3.系统Contact Matcher:路径与表建立映射关系
路径/raw_contacts对应raw_contacts表
路径/data对应data表
4.添加权限



5.结果如图



PS:内部查询的时候并不是直接查询data表,而是查询data与mimetypes生成的view_data

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: