Android知识点复习4(ContentProvider)

ContentProvider:内容提供者,进程间 进行数据交互 、共享、跨进程通信

ContentProvider 以表的形式将数据呈现给外部应用和其他进程,类似数据库的形式(当一个APP单一的进程占用内存过高是否考虑把一些功能,例如视频播放、乐音播放等功能放到另一个进程中)。

1.ContentProvider基本操作
// 外部进程向 ContentProvider 中添加数据
public Uri insert(Uri uri, ContentValues values) 
// 外部进程 删除 ContentProvider 中的数据 
public int delete(Uri uri, String selection, String[] selectionArgs) 
// 外部进程更新 ContentProvider 中的数据
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
// 外部应用 获取 ContentProvider 中的数据 
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
// ContentProvider创建后 或 打开系统后其它进程第一次访问该ContentProvider时 由系统进行调用 
public boolean onCreate() 
// 得到数据类型,即返回当前 Url 所代表数据的MIME类型
 public String getType(Uri uri) 
复制代码
2.ContentProvider的几个东西
  • 在系统中注册读内容提供者的权限
<permission
    android:name="xxxxx.xxxx.permission.READ_CONTENT"    //指定权限的名称
    android:label="Permission for read content provider"
    android:protectionLevel="normal"    
    />
复制代码
  • URI :作为访问的标识(地址),content://Authority/Path、content://Authority/Path/Id
    Authority:授权信息,用以区别不同的ContentProvider;
    Path:表名;
    id :id;
Uri uri = Uri.parse("content://xxxxx.xxxx./User/123") 
复制代码
3.ContentResolver(ContentProvider集群?代理?)

管理不同 ContentProvider,直接通过不同的URI操作不同的ContentProvider中的表

  • ContentResolver基本操作
// 获得ContentResolver
context.getContentResolver(); 
// 外部进程向 ContentProvider 中添加数据 
public Uri insert(Uri uri, ContentValues values)&emsp; 
// 外部进程 删除 ContentProvider 中的数据 
public int delete(Uri uri, String selection, String[] selectionArgs) 
// 外部进程更新 ContentProvider 中的数据 
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)&emsp; 
// 外部应用 获取 ContentProvider 中的数据 
public Cursor query(Uri uri, String[] projection, 
复制代码
4.ContentUris类(操作Uril)

基本操作

//Uri追加ID
withAppendedId()
//Uri获取ID
parseId()
复制代码
5.UriMatcher类(匹配Uri)

基本操作

//普通的初始化一下
 UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); 
 matcher.addURI("xx.xx.xx", "uzi1", 1); 
 matcher.addURI("xx.xx.xx", "uzi2", 2); 
//若 uri 为 :"content://xx.xx.xx/uzi1";
 matcher.match(uri) = 1;
//若 uri 为 :"content://xx.xx.xx/uzi2";
 matcher.match(uri) = 2;
复制代码
6.ContentObserver类(内容观察者)

当ContentProvider 中的数据发生变化(增、删 、改)时,就会触发 ContentObserver类

// 注册内容观察者
ContentObserver getContentResolver().registerContentObserver(uri); 
// 通知变化
public class UserContentProvider extends ContentProvider { 
  public Uri insert(Uri uri, ContentValues values) { 
     getContext().getContentResolver().notifyChange(uri, null);
  } 
 } 
// 注销观察者 
getContentResolver().unregisterContentObserver(uri);
复制代码

实践博文推荐:https://www.cnblogs.com/mauiie/p/3737868.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值