360-读取手机联系人

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 hashMap =new HashMap();
        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 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 map= mAdapter.getItem(arg2);
String phoneString= map.get("phone");
Toast.makeText(MainActivity.this, phoneString, 0).show();
}
}
});

你可能感兴趣的:(360-读取手机联系人)