内容提供者

四大组件

  • Activity 活动,界面
  • Service 服务,没有界面,后台长期运行
  • BroadcastReceiver 广播接受者
  • ContentProvider 内容提供者

内容提供者

把自己应用程序私有的数据,暴露给别的应用程序

内容提供者编写步骤

1、在数据应用程序里面开一个“后门”写一个类继承ContentProvider

            MyDBContentProvider extends ContentProvider

2、内容提供者实现类里面默认定义了增删改查的4个方法

        query --->Uri
        insert--->Uri
        delete--->Uri
        update--->Uri

3、定义一个匹配器(保安)

        private static UriMatcher mUriMatcher = new
        UriMatcher(UriMatcher.NO_MATCH);
        //如果匹配失败返回-1

4、训练匹配器(训练保安)

        static{
        //authority 主机名 路径的前缀名
        mUriMatcher.addURI("包名","数据库表名",CONTACT_INFO);
        //content://包名/数据库表名  -->1
        }//添加匹配规则

5、在清单文件中配置内容提供者

        <provider name= "" authority="包名同上"

如何调用内容提供者获取私有数据库内容

1、获取内容提供者的解析器

        ContentResolver resolver = getContentResolver();

2、利用解析器访问私有的数据库

     resolver.query(Uri uri ,...);
     resolver.insert(Uri uri ,...);
     resolver.delete(Uri uri ,...);
     resolver.update(Uri uri ,...);
     注意:uri必须指定正确,如果uri错误,访问就会失败.

如何使用内容提供者获取系统应用程序的数据

呼叫记录的内容提供者

com.android.provider.contacts
contacts2.db

虚拟电话

短信的内容提供者

com.android.provider.telephony
mmssms.db

联系人内容提供者

三张表
* raw_contacts

保存联系人的id,每一个联系人都有一个不同的id,名字叫contact_id

  • data

    保存联系人的数据,通过raw_contact_id来去识别这个数据属于哪个联系人

  • mimetype

    保存数据的类型

查询联系人信息的步骤.

  1. 查询raw_contacts表, 把每个联系人的contact_id.
  2. 根据contact_id 查询data表,把联系人的数据取出来.
  3. 根据联系人数据的mimetype,获取数据代表什么含义.

添加联系人信息的步骤.

  1. 在raw_contacts表里面添加联系人的id.
  2. 根据这个添加的id,在data表里面添加联系人的数据

内容观察者

    ContentResolver resolver = getContentResolver();
    // 短信数据库表的uri
    Uri uri = Uri.parse("content://sms/");
    //注册一个内容观察者
    resolver.registerContentObserver(uri, true, new MyObserver(
            new Handler()));

猜你喜欢

转载自blog.csdn.net/lzx2018/article/details/81190780