您的位置:首页 > 其它

方便快捷读取手机联系人

2015-09-06 22:23 357 查看
大家好,今天晚上我给大家分享的是使用内容提供者读取手机联系人信息,并显示在列表里。现在很多应用都有涉及到读取手机联系人的功能,其实很好操作,根据系统联系人的表字段方可提出数据。因为涉及到个人隐私问题,我就不截图了,相信大家能清晰的想象到显示页面是怎样状况的。

public class MainActivity extends Activity {

//自定义ListView

private ListView list;

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);'

list = (ListView) findViewById(R.id.list);

//将方法返回的结果保存在ArrayList集合里

ArrayList<Map<String, String>> data = readContacts();

//创建系统自带自配器SimpleAdapter,

//参数一:上下文,参数二:显示的数据。参数三:资源布局。,参数四:从哪里来 。参数五:到哪里去,到指定控件的Id

SimpleAdapter adapter = new SimpleAdapter(this, data,

R.layout.item_list, new String[] { "name", "phone" },

new int[] { R.id.name_tv, R.id.phone_tv });

//展示适配器数据

list.setAdapter(adapter);

}

//读取联系人方法

private ArrayList<Map<String, String>> readContacts() {

ArrayList<Map<String, String>> data = new ArrayList<Map<String, String>>();

//首先,从raw_contacts表中读取联系人的id("contact_id")

//其次,根据contact_id从data表中查询出相应的电话号码,和联系人名称

//然后,根据mimetype来区分那个是联系人,那个是电话号码

//得到raw_contacts的uri

Uri rawContactUri = Uri

.parse("content://com.android.contacts/raw_contacts");

//得到data的uri

Uri dataUri = Uri.parse("content://com.android.contacts/data");

//通过内容提供者获取手机联系人

Cursor rawCursor = getContentResolver().query(rawContactUri,

new String[] {"contact_id" }, null, null, null);

if (rawCursor != null) {

//游标遍历

while (rawCursor.moveToNext()) {

//得到游标遍历的第一行数据,就是contact_id的数据

String contactId = rawCursor.getString(0);

//根据contact_id从data表值查询相应的电话号码和联系人名称,实际查询的是视图view_data

Cursor dataCursor = getContentResolver().query(dataUri,

new String[] { "data1", "mimetype" }, "contact_id=?",

new String[] { contactId }, null);

if (dataCursor != null) {

//创建集合ma,用来存放数据

Map<String, String> map = new HashMap<String, String>();

//dataCursor游标遍历

while (dataCursor.moveToNext()) {

//得到data表中的data1值

String data1 = dataCursor.getString(0);

//得到data表中的mimetype值

String mimetype = dataCursor.getString(1);

//根据mimetype类型判断哪个是电话号码。哪个是联系人

if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) {

//把电话号码存放在map集合,key值:phoe

map.put("phone", data1);

} else if ("vnd.android.cursor.item/name"

.equals(mimetype)) {

//把联系人存放在map集合里,key值:name

map.put("name", data1);

}

}

//添加到ArrayList里

data.add(map);

//关闭游标

dataCursor.close();

}

}

rawCursor.close();

}

//返回data数据

return data;

}

}

通过以上方便快捷的方式就可以读取手机联系人,简单的总结是:获取raw_contacts表中contact_id,然后根据contact_id,获取data表中的data1,mimetype,最后,根据mimetype类型,就可以判断是电话号码还是手机联系人。

恩,今天就到这了。大家睡个好觉。



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