zoukankan      html  css  js  c++  java
  • Android ContentProvider

    1. ContentProvider:不同应用之间进行数据交换的标准API,当一个应用程序要把自己的数据暴露给其他应用时,就可以通过ContentProvider来实现,其他应用程序通过ContentResolver操作ContentProvider暴漏的数据
    2. 应用程序通过ContentProvider暴露了自己的数据操作接口,那么不管应用是否启动,其他应用都可以通过该接口来操作该应用程序的内部数据

    3. ContentProvider以某种Uri的形式对外提供数据,开发ContentProvider的步骤:
      • 定义自己的ContentProvider类,继承自Android提供的ContentProvider基类
      • 向Android系统注册,也就是在AndroidManifest.xml中注册,注册ContentProvider时需要为它绑定一个Uri,并制定authorities属性,注意name值中有点,exported表示是否允许其他应用调用
      • <Provider android:name=".DictProvider" android:authorities="org.crazyit.providers.dictprovider"   android:exported="true" />
      • DictProvider还需实现如下的方法:
        • onCreate:其他应用程序第一次访问ContentProvider时,该ContentProvider会被创建出来,并立即调用onCreate方 法
        • Uri insert(Uri,ContentValues)方法:根据该Uri插入ContentValues对应的数据
        • int delete(Uri,String,String[])方法:根据Uri删除select条件所匹配的全部记录
        • int update(Uri,ContentValues,String,String[])方法:根据Uri修改满足selection条件所匹配的所有记录
        • Cursor query(Uri,String[],String,String[],String):恩局Uri查询出满足select条件所匹配的全部记录,其中projection就是一个列名列表,表明只选择出指定的列
        • String getType(Uri):返回当前Uri所代表的数据的MIME类型,如果Uri对应数据包含多条记录,那么MIME类型字符串应该是以vnd.android.cursor.dir 开头,如果只对应一条记录,那么返回的MIME类型字符串应该以vnd.android.cursor.item开头

    4. ContentProvider Uri的格式:content://authority/数据部分,autority类似于Url中域名的作用,数据部分是可变的,前面是固定的格式,要注意数据部分的解释,因为一个ContentProvider可能提供多个Uri 对应不同数据的访问,但content://authority部分不变

    5.  数据的存储系统可以由开发人员任意决定,一般来讲,大多数的Content Provider都通过Android的文件存储系统或SQLite 数据库建立自己的数据存储系统。

    6. 系统Uri示例:
      • content://media/internal/images:返回设备上存储的所有图片
      • content://contacts/people:返回设备上所有联系人信息
      • content://contacts/people/45:返回联系人信息中ID为45的联系人记录

    7. Context提供了getContentResolver函数获取ContentResolver对象,之后可以调用它的方法,这些方法都会转由Uri对应的ContentProvider的同名函数执行
      • insert(Uri,ContentValues):向Uri对应的ContentProvider中插入ContentValues数据
      • delete(Uri,String,String[]):删除Uri对应的ContentProvider中与条件匹配的数据
      • update(Uri,ContentValues,String,String[]):更新与条件匹配的数据
      • query(Uri,String[],String,String[],String):查询与条件匹配的数据

    8. UriMatcher工具类:
      • void addUri(String,String,int code):该方法用于向UriMatcher对应注册Uri,code代表Uri对应的标识码
      • int match(Uri uri):返回Uri的标识码,找不到返回-1

    9. ContentUris工具类,常用语生成查询的Uri
      • withAppendedId(uri,id):用于给路径加上ID部分
      • parseId(Uri):用于从指定Uri中解析出所包含的ID值

    10. 系统一般会把ContentProvider的Uri,数据列等信息以常量形式公开出来,方便访问
    11. 操作系统的ContentProvider
      • Contacts(管理联系人的应用程序)的ContentProvider提供的几个Uri:
        • ContactsContract.Contacts.CONTENT_URI:管理联系人的Uri
        • ContactsContract.CommonDataKinds.Phone.CONTENT_URI:管理联系人电话的Uri
        • ContactsContract.CommonDataKinds.Email.CONTENT_URI:管理联系人EMail的Uri

    12. Android为多媒体提供的ContentProvider的Uri:
      • MediaStore.Audio.Media.EXTERNAL_CONTENT_URI:存储在外部存储器上的音频文件内容的ContentProvider的Uri
      • MediaStore.Audio.Media.INTERNAL_CONTENT_URI:存储在手机内部存储器上的音频文件的ContentProvider的Uri
      • MediaStore.Images.Media.EXTERNAL_CONTENT_URI:存储在外部存储器上的图片文件内容的ContentProvider的Uri
      • MediaStore.Images.Media.INTERNAL_CONTENT_URI:存储在手机内部存储器上的图片内容的ContentProvider的Uri
      • MediaStore.Video.Media.EXTERNAL_CONTENT_URI
      • MediaStore.Video.Media.INTERNAL_CONTENT_UR
    13. ContentObserver类:监听ContentProvider数据改变的监听器需要继承ContentObserver类,并重写 该基类所定义的onChange方法,当监听的ContentProvider的数据发生改变时,该onChange将会被触发注册监听器要使用ContentResolver的registerContentObserver函数
     


     
     
  • 相关阅读:
    物联网市场碎片化严重 物联网网关设计挑战重重
    物联网市场碎片化严重 物联网网关设计挑战重重
    物联网市场碎片化严重 物联网网关设计挑战重重
    越做越大的行李寄存生意,老板竟是3个95后
    互联网人失业理由排行榜,每一个都戳破职场真相
    读小说赚钱吗?这个年入百万
    BI驾驶舱的必备知识
    2019开源BI软件排行榜
    主流的开源bi工具
    企业为什么需要BI决策系统?
  • 原文地址:https://www.cnblogs.com/phenixyu/p/3969153.html
Copyright © 2011-2022 走看看