ContentProvider适用场景:

1) ContentProvider为存储和读取数据提供了统一的接口。
2) 使用ContentProvider,应用程序可以实现数据共享。
3) android内置的许多数据都是使用ContentProvider形式,供开发者调用的(如视频,音频,图片,通讯录等)。


如何实现ContentProvider?

1.继承抽象类ContentProvider实现一系列针对于数据的增、删、改、查等方法;

2.需要在AndroidMainfest.xml中完成对ContentProvider的注册。


何为Uri?

Uri是指通用资源标识符

      content://com.example.provider/music/#

第一段:前缀表明数据受控于一个内容提供者。它从不修改,也就是schema

第二段:是指在AndroidMainfest.xml中我们注册的Provider中的android:authorities属性所对应的

第三段:具体操作于哪个条目

第四段:具体指定到哪个条目下的哪条记录(#表示通配符)


ContentResolver:

  使用ContentResolver操作ContentProvider中的数据:

1.当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver类来完成

2.使用Activity提供的getContentResolver()方法获取ContentResolver对象

3.ContentResolver类提供了与ContentProvider类相同签名的四个方法



看下列代码展示:

            ContentResolver cr=getContentResolver();    Cursor c=cr.query(Contacts.CONTENT_URI, new String[]{Contacts._ID,Contacts.DISPLAY_NAME}, null,null, null);    if(c!=null)    {    while(c.moveToNext())    {        int id=c.getInt(c.getColumnIndex("_id"));        Log.i("info", "_id:"+id);        Log.i("info", "name:"+c.getString(c.getColumnIndex("display_name")));        Cursor c1=cr.query(Phone.CONTENT_URI, new String[]{Phone.NUMBER,Phone.TYPE}, Phone.CONTACT_ID+"="+id, null, null);        //根据联系人ID查询出联系人的电话号码        if(c1!=null)        {        while(c1.moveToNext())        {        int type=c1.getInt(c1.getColumnIndex(Phone.TYPE));        if(type==Phone.TYPE_HOME)        {        Log.i("info", "家庭电话:"+c1.getString(c1.getColumnIndex(Phone.NUMBER)));        }        else {        Log.i("info", "手机:"+c1.getString(c1.getColumnIndex(Phone.NUMBER)));}        }            c1.close();        }          //根据联系人的ID去查询出联系人的邮箱         Cursor c2=cr.query(Email.CONTENT_URI, new String[]{Email.DATA,Email.TYPE}, Email.CONTACT_ID+"="+id, null, null);         if (c2!=null) {while (c2.moveToNext()) {    int type=c2.getInt(c2.getColumnIndex(Email.TYPE));    if (type==Email.TYPE_WORK) {Log.i("info", "工作邮箱:"+c2.getString(c2.getColumnIndex(Email.DATA)));}}c2.close();}    }    c.close();    } 


需要注意的地方都用红色标记出来了。

还有一个注意的地方就是设置访问权限




自己先在通讯录里创建两个联系人:如Jim和张三





运行结果如下:


更多相关文章

  1. 一句话锁定MySQL数据占用元凶
  2. SQLite数据库相关(三) SQLiteOpenHelper类
  3. Android开发系列(二十二):AdapterViewFlipper的功能和使用方法
  4. Android(安卓)播放视频常见问题小结
  5. 调用startactivityforresult后,onactivityresult立刻返回RESULT_C
  6. Android(安卓)Studio 四大组件之 Service的生命周期上
  7. android contacts 联系人搜索解析
  8. Android(安卓)中Binder的解释
  9. Android(安卓)开发过程中遇到的各类问题总结

随机推荐

  1. Android在TQ2440开发板上的移植
  2. Android(安卓)滚动条
  3. Android用Application设置全局变量以及使
  4. 如何离线安装android的sdk
  5. Android学习笔记之Android包、ADB介绍
  6. android 各种控件颜色值的设置(使用Drawab
  7. android Adapter综合介绍
  8. Android(安卓)基本控件及表单三大控件,事
  9. 详解 Android(安卓)的 Activity 组件
  10. android:shape的使用