android内容提供者

一、什么是内容提供者ContentProvider,有什么用?

Android四大组件之一,用于跨应用数据共享,我们自己的应用可以通过使用ContentProvider机制获取联系人信息,短信,媒体库等信息。

不要以为只能操作数据库数据。

二、怎么通过内容提供者获得其他应用的信息?

用getContentResolver().query()/insert()/update()/delete()等方法对表进行操作;

如:获取联系人名字和手机号

Cursor cursor =  getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, null, null, null);
while (cursor.moveToNext()) {
    // 获取联系人姓名
    String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
    // 获取联系人手机号
    String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}

上面的常量CONTENT_URI,DISPLAY_NAME,NUMBER都是ContactsContract.CommonDataKinds.Phone类封装好的。

记得声明权限:

<uses-permission android:name="android.permission.READ_CONTACTS" />

三、怎么内容提供者对其他应用暴露数据?

创建MyProvider继承自ContentProvider,重写里面的onCreate(),query(),insert(),delete(),update(),getType()等方法,其他应用调用相应的方法即可获得数据。

在接下去讲之前先补下准备知识:

1、内容URI:在ContentResolver的增删改查的方法中都会传入一个Uri,这是内容提供器中的数据的唯一标识符,由权限(authority)和路径(path)构成,权限一般写包名,路径根据业务定,当然,这样只是为了保证唯一性,写其他的也不会错;

2、内容URI写法:(1)以路径结尾 content://包名.provider/表名(如:content://com.talentclass.talent.provider/table);

(2)以id结尾 content://包名.provider/表名/(如:content://com.talentclass.talent.provider/table/1/name 表示操作table表中id为1的name字段);

3、将内容URI解析成Uri对象的方法:Uri uri = Uri.parse("content://com.talentclass.talent.provider/table");


那怎么匹配Uri呢?

可以用UriMatcher,该类有一个addURI()方法,传入权限、路径和一个自定义代码,在后面调用UriMatcher的match()方法时传入Uri时就可以判断对哪部分内容进行操作。


getType()用于获取 Uri 对象所对应的 MIME 类型,格式如下:

1、以vnd.开头;

2、如果内容 URI 以路径结尾,则后接 android.cursor.dir/,如果内容 URI 以 id 结尾,则后接 android.cursor.item/。

3、加上vnd.权限.路径。

content://com.talentclass.talent.provider/table对应:vnd.android.cursor.dir/vnd.com.talentclass.talent.provider.table

content://com.talentclass.talent.provider/table/1对应:vnd.android.cursor.item/vnd.com.talentclass.talent.provider.table

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值