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函数
     


     
     
  • 相关阅读:
    自定义组件要加@click方法
    绑定样式
    647. Palindromic Substrings
    215. Kth Largest Element in an Array
    448. Find All Numbers Disappeared in an Array
    287. Find the Duplicate Number
    283. Move Zeroes
    234. Palindrome Linked List
    202. Happy Number
    217. Contains Duplicate
  • 原文地址:https://www.cnblogs.com/phenixyu/p/3969153.html
Copyright © 2011-2022 走看看