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函数
时间: 2024-08-02 11:03:23

Android ContentProvider的相关文章

Android ContentProvider、ContentResolver和ContentObserver的使用

1.ContentProvider.ContentResolver和ContentObserver ContentProvider是Android的四大组件之一,可见它在Android中的作用非同小可.它主要的作用是:实现各个应用程序之间的(跨应用)数据共享,比如联系人应用中就使用了ContentProvider,你在自己的应用中可以读取和修改联系人的数据,不过需要获得相应的权限.其实它也只是一个中间人,真正的数据源是文件或者SQLite等. 一个应用实现ContentProvider来提供内容

Android ContentProvider完整案例

ContentData类,提供数据常量: /** * 提供ContentProvider对外的各种常量,当外部数据需要访问的时候,就可以参考这些常量操作数据. * @author HB * */ public class ContentData { public static final String AUTHORITY = "hb.android.contentProvider"; public static final String DATABASE_NAME = "te

Android基础 : Android ContentProvider

Android 应用程序通过ContentProvider实现方式统一的数据共享功能. 外界的程序通过ContentResolver接口可以访问ContentProvider提供的数据,在Activity当中通过getContentResolver()可以得到当前应用的 ContentResolver实例. 参考文章 Android ContentProvider和getContentResolver

Android总结七(Service)

一.服务 1.什么是服务? Service是一个可以长期在后台运行, 没有界面的组件. 它可以被其他组件绑定, 可以在进程之间通信. 2.创建Service 定义类继承Service, 实现回调函数. 在清单文件中声明<service> 3.启动服务,停止服务 在其他组件中可以调用startService()方法启动一个服务, 可以调用stopService()方法停止一个服务 在服务中可以使用stopSelf()方法停止服务.如果stopSelf()方法不传任何参数, 就是立即停止, 无论是

Android ContentProvider基本用法

转自:https://www.jianshu.com/p/601086916c8f 一.基本概念 ContentProvider是Android系统中提供的专门用户不同应用间进行数据共享的组件,提供了一套标准的接口用来获取以及操作数据,准许开发者把自己的应用数据根据需求开放给其他应用进行增删改查,而无须担心直接开放数据库权限而带来的安全问题.系统预置了许多ContentProvider用于获取用户数据,比如消息.联系人.日程表等. 二.ContentResolver 在ContentProvid

[Android] ContentProvider实例详解

1.ContentProvider是什么? ContentProvider(内容提供者)是Android的四大组件之一,管理android以结构化方式存放的数据,以相对安全的方式封装数据(表)并且提供简易的处理机制和统一的访问接口供其他程序调用. Android的数据存储方式总共有五种,分别是:Shared Preferences.网络存储.文件存储.外储存储.SQLite.但一般这些存储都只是在单独的一个应用程序之中达到一个数据的共享,有时候我们需要操作其他应用程序的一些数据,就会用到Cont

android,ContentProvider+ContentObserver+ContentResolver,用法。

这个是传智播客老师讲android开发时的一个图. 一. PersonProvider继承ContentProvider,实现ContentProvider中的数据操作类. 在需要监听的操作中添加添加数据变化通知. this.getContext().getContentResolver().notifyChange(uri, null); 第二个参数,数据变化的监听者,可以不设置,也即是设为null,如果给定了这个监听者,不管外面有多少个应用要设置监听,进行监听数据变化,这个getConten

Android ContentProvider和getContentResolver

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/0821/367.html 安卓系统中的数据库SqlLite操作和java中mysql的数据库操作很不一样,造成这样的原因是因为在安卓中数据库是属于进程的不存在数据库客户端,也不存在数据库服务器. 关于SqlLite数据库的文章可以参考 Android 使用SQLite数据库详解 : http://www.jcodecraeer.com/a/anzhuokaifa/android

android contentprovider内容提供者

contentprovider内容提供者:让其他app可以访问私有数据库(文件) 1.AndroidManifest.xml 配置provider <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.dbtest&q