ContentProvider内容提供器

Content Provider主要用于在不同的应用程序之间实现数据共享的功能,它能提供一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问数据的安全性。

运行时权限:6.0系统中加入的,用户不需要在安装软件的时候一次性授权所有申请的权限,而是可以在软件的使用过程中再对某一项权限申请进行授权。

权限的分类:普通权限和危险权限。普通权限:不会直接威胁到用户的安全和隐私的权限,对于这部分权限申请,系统会自动帮我们进行授权,而不需要用户再去手动操作了。危险权限:可能会触及用户隐私,或者对设备安全性造成影响的权限,必须用户手动点击授权才可以,否则程序无法使用相应的功能。除了危险权限就是普通权限,危险权限一共9组24个。

不需要了解每个权限的作用,每当要使用一个权限时,如果查着是属于表中的权限,那么就需要进行运行时权限处理,如果不在,只需要在AndroidManifest.xml中添加一下权限声明就可以了。

注意:表格中每个危险权限都属于一个权限组,我们在进行运行时权限处理时使用的是权限名,但是用户一旦同意授权了,那么该权限所对应的权限组中所有其他权限也会同时被授权。

访问https://developer.android.com/reference/android/Manifest.permission可以查看Android系统中完整的权限列表。

内容提供器:用法有两种。


第一种:使用现有的内容提供器:借助ContentResolver类,可以通过Context中的getContentResolver()方法获取到该类的实例。ContentResolver类中提供了对数据进行CRUD操作(insert(),update(),delete(),query())。用法和SQLiteDatabase不同,ContentResolver中的增删改查方法都是不接收表名参数的,而是使用一个Uri参数代替,这个参数被称为内容URI。内容URI给内容提供器中的数据建立了唯一的标志符,由authority和path组成。authority是用于对不同的应用程序做区分的,一般为了避免冲突,都会采用程序包名的方式来进行命名。path则是用于对同一应用程序中的不同表做区分的,通常都会添加到authority后面。此外,还需要在两个内容URI组成的字符串的头部加上协议声明。得到URI字符串之后,还需要将它解析成Uri对象才可以作为参数传入。总结:获取该应用程序的内容URI,然后借助ContentResolver进行CRUD操作。

第二种:创建自己的内容提供器:1>创建一个类继承ContentProvider,重写6个抽象方法。


此外,内容URI后面可以加id。内容URI的格式主要就只有两种,以路径结尾表示期望访问该表中所有的数据,以id结尾就表示期望访问该表中拥有相应id的数据。可以使用通配符的方式来分别匹配两种格式的内容URI,规则如下。

*:表示匹配任意长度的任意字符。

#:表示匹配任意长度的数字。

2>借助UriMatcher实现匹配内容URI的功能。UriMatcher中提供了一个addURI()方法,接收3个参数,可以分别把authority、path和一个自定义代码传进去。当调用UriMatcher的match()方法时,就可以将一个Uri对象传入,返回值是某个能够匹配这个Uri对象所对应的自定义代码,利用这个代码,就可以判断出调用方期望访问的是哪张表中的数据了。getType()方法,用于获取Uri对象所对应的MIME类型。一个内容URI所对应的MIME字符串主要由3部分组成:

必须由vnd开头;

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

最后接上vnd.<authority>.<path>。

到这里,一个完整的内容提供器就创建完成了,任何一个程序都可以使用ContentResolver来访问我们程序中的数据。注意,内容提供器要在AndroidManifest.xml文件中注册才可以使用。使用AndroidStudio快捷方式创建内容提供器会自动生成注册。







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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值