使用ContentResolver获取联系人信息

ContentResolver的作用:
1、可以通过ContentResolver来获取android内部的数据,比如联系人信息、系统的多媒体信息、短信信息等等。

2、可以获取提供了ContentProvider的应用的数据。


ContentResolver的使用方法:(参考《疯狂Android讲义第三版》446面)

1、调用Context的getContentResolver()获取ContentResolver对象。

2、根据需要调用ContentResolver的insert(),delete(),updata(),query方法操作数据库

3、为了操作系统提供的ContentResolver,需要了解该ContentProvider的Uri,以及该ContentProvider所操作的数据列的列名,可以通过查阅Android官方文档来获取这些信息。

4、使用时牢记不要忘记在AndroidManifest中添加权限,并且要及时close掉curcor


下面来具体操作

first.首先需要知道获取联系人的URI

<1>content://com.android.contacts/raw_contacts(获得联系人的id,姓名)
<2>content://com.android.contacts/raw_contacts/"+id+"/data(根据联系人的id获得联系人的信息)短信。
手机系统的表中,联系人的 姓名、id 是在raw_contacs表,号码、头像、邮箱等信息又是在data表中,所以需要以上2个Uri来查询联系人信息,如果有兴趣可以将自己的手机root查看手机系统文件


second.需要在清单文件里添加获取联系人信息的权限
<!--添加联系人权限-->
<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>

third.最后结果如图,点击按钮获取手机所有联系人id,姓名,号码


fourth.具体代码

package com.zking.a24provider;

import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleAdapter;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Provider25Activity extends AppCompatActivity {

    private ContentResolver cr;
    private ListView provider25_listview;
    private List<Map<String, Object>> list;


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

        //展示联系人的listview
        provider25_listview = (ListView) findViewById(R.id.provider25_listview);
        list = new ArrayList<>();

        //得到内容访问者
        cr = getContentResolver();
    }

    //得到联系人点击事件
    public void getRaw_contacs(View view){
        //获得联系人的姓名id
        Uri uri=Uri.parse("content://com.android.contacts/raw_contacts");
        Cursor cursor= cr.query(uri,null,null,null,null);
        while (cursor.moveToNext()){
            //id
            int id=cursor.getInt(cursor.getColumnIndex("_id"));
            //姓名
            String name=cursor.getString(cursor.getColumnIndex("display_name"));

            //通过id得到data表中对应的电话号码
            Uri uri1=Uri.parse("content://com.android.contacts/raw_contacts/"+id+"/data");
            Cursor cursor1=cr.query(uri1,null,null,null,null);
            while (cursor1.moveToNext()){
                //电话号码
                String tel=cursor1.getString(cursor1.getColumnIndex("data1"));
                String type=cursor1.getString(cursor1.getColumnIndex("mimetype"));
                if(type.contains("phone")){
                    Log.i("text",id+"   "+name+" "+tel);
                    Map<String ,Object> map=new HashMap<>();
                    map.put("id",id);
                    map.put("name",name);
                    map.put("tel",tel);
                    list.add(map);
                }
            }
        }

        //使用SimpleAdapter来展示数据
        SimpleAdapter simpleAdapter=new SimpleAdapter(this,list,R.layout.item_list,new String[]{"id","name","tel"},new int[]{R.id.tv_item_list_id,R.id.tv_item_list_name,R.id.tv_item_list_age});
        //最后给listview设置适配器
        provider25_listview.setAdapter(simpleAdapter);
    }
}

展开阅读全文

没有更多推荐了,返回首页