ContentProvider

来源:互联网 发布:2016网络彩票开售 编辑:程序博客网 时间:2024/05/17 22:48
  1. 数据共享
    ContentProvider,这是一种不同应用之间共享数据的标准API:
    当应用希望提供数据时,就提供Contentprovider
    其他应用通过ContentResolver来操作
    注意:
    ContentProvider需要在AndroidManifest.xml中注册
    一旦应用提供CP,不论应用启动与否,都可被操作
    ContentProvider是单例模式的,多个ContentResolver请求数据时,是委托给同一个CP来操作的。
  2. URI
    *Uri举例:content://org.edu.provider/words
    content://:这部分是Android固定的
    org.edu.provider:这部分是ContentProvider中的authority
    words:资源部分,根据资源不同这部分不同*
    通过Uri提供的静态方法parse()来实现将字符串转换为Uri
    Uri uri = Uri.parse(“content://org.edu.p../words”)
  3. 创建一个ContentProvider的步骤
定义自己的类继承ContentProvider类boolean onCreate()Uri insert(uri, values)int delete(uri, selection, selectionargs)int update(uri, values, selection, selectionargs)Cursor query(uri, values,selection,selectionargs,sortorder)String getType(uri)向Android系统注册ContentProvider<provider android:name="“android:authorities=""></provider>
  1. 应用通过ContentResolver操作CP暴漏的数据
  2. 获得ContentResolver的方法:
    Content.getContentResolver()
    通过ContentResolver操作数据:
    insert(uri, values)
    delete(uri , where , selectionargs)
    update(uri, values , where ,selectionargs)
    query(uri,projection, selection ,selectionargs,order)
  3. 操作URI的工具类
    ContentUris
withAppendedId(uri,id):用于为路径加上ID部分Uri uri = Uri.parse("content://com.test.provider.personprovider/person")Uri resultUri = ContentUris.withAppendedId(uri, 5);//生成后的Uri为:content://com.test.provider.personprovider/person/5parseId(uri):用于从路径中获取ID部分Uri uri = Uri.parse("content://com.test.provider.personprovider/person/5")long personid = ContentUris.parseId(uri);//获取的结果为:5

确定ContentProvider匹配的Uri:UriMatcher

void addURI(authority, path , code):添加需要匹配的uriint match(uri): 如果匹配就会返回匹配码
  1. 监听ContentProvider的数据变化

自定义类继承ContentObserver类,重写onChange方法,也就是当CP数据改变后的回调方法
通过ContentResolver向Uri注册ContentObserver registerContentObserver(uri,notifyForDescendents, observer)

Uri:该监听器所监听的CP的UrinotifyForDescendents:是否监听子Uri数据改变observer:监听器实例
0 0