1.读取手机联系人是一个复杂的操作所以一般放在一个新的线程中。
2.获取一个ContentResolver.
ContentResolver resolver =getContentResolver();
3.对Resolver进行查询操作
new Thread(){
public void run() {
//获取内容提供者
ContentResolver resolver =getContentResolver();
//进行查询操作,获取存在表中的数据,获取唯一的ID,根据ID查询下面的数据
Cursor cursor=resolver.query(Uri.parse(urlString), new String[]{"contact_id"}, null, null, null);
while (cursor.moveToNext()) {
//因为只有一个数据所以传入0就可以
String id =cursor.getString(0);Log.e("ChainLog","+++++++++++++++++" +id);
ContentResolver indexre =getContentResolver();
//根据ID查询数据和数据对应的类型
Cursor indexCursor =indexre.query(Uri.parse("content://com.android.contacts/data"),
new String[]{"data1","mimetype"}, "raw_contact_id=?", new String[]{id}, null);
//生成一个MAP对象来存储数据
HashMap<String, String> hashMap =new HashMap<String, String>();
while (indexCursor.moveToNext()) {
//Log.e("ChainLog", indexCursor.getString(0)) ;
//Log.e("ChainLog", indexCursor.getString(1)) ;
String type =indexCursor.getString(1);
String dataString=indexCursor.getString(0);
//判断是否为空
if(!TextUtils.isEmpty(dataString)){
//判断类型如果是姓名
if(type.equals("vnd.android.cursor.item/name")){
hashMap.put("name", dataString);
Log.e("ChainLog", "名字是"+dataString);
//判断类型是否为电话号码
}else if (type.equals("vnd.android.cursor.item/phone_v2")) {
hashMap.put("phone", dataString);
Log.e("ChainLog", "电话是"+dataString);
}
}
}
indexCursor.close();
//将数据存放到list集合中
list.add(hashMap);
}
handler.sendEmptyMessage(0);
cursor.close();
};
}.start();
5.生成Adpter来存放数据
//生成一个Adapter
public class MyAdapter extends BaseAdapter{
public int getCount() {
// 返回list的长度
return list.size();
}
public HashMap<String, String> getItem(int arg0) {
// 返回每一个条目的东西(声明为MAP类型)
return list.get(arg0); //返回list中的数据
}
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
public View getView(int arg0, View arg1, ViewGroup arg2) {
//自定义view
View view =View.inflate(MainActivity.this, R.layout.contact_list, null);
TextView tv_name=(TextView) view.findViewById(R.id.tv_name);
TextView tv_phone=(TextView) view.findViewById(R.id.tv_phone);
tv_name.setText(getItem(arg0).get("name"));
tv_phone.setText(getItem(arg0).get("phone"));
return view;
}
}
6.设置每一个条目的点击事件
mlist=(ListView)findViewById(R.id.list_contact);
mlist.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
mAdapter= new MyAdapter();
if (mAdapter!=null) {
HashMap<String, String> map= mAdapter.getItem(arg2);
String phoneString= map.get("phone");
Toast.makeText(MainActivity.this, phoneString, 0).show();
}
}
});