ContentProvider

  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/5
parseId(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):添加需要匹配的uri
int match(uri): 如果匹配就会返回匹配码
  1. 监听ContentProvider的数据变化

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

Uri:该监听器所监听的CP的Uri
notifyForDescendents:是否监听子Uri数据改变
observer:监听器实例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值