第七章 内容提供器
-
运行时权限申请
-
通过ContextCompat.checkSelfPermission()方法 判断用户是否给某个危险权限授权。方法接收两个参数,第一个是Context,第二个是具体的权限名。比如拨打电话的权限名是Manifest.permission.CALL_PHONE,然后使用返回值和PackageManager.PPERMISSION_GRANTED做比较,相等表示已经授权
-
如果没有授权,则调用ActivityCompat.requestPermissions()方法向用户申请权限,方法接收三个参数,第一个参数要求是Activity的实例,第二个是String数组,存放要申请的权限名(Manifest.permission.XXXX_XXX),第三个是请求码(int),要唯一。对应了一个回调方法onRequestPermissionResult,不管用户是否同意授权,都会调用这个回调的方法,并把授权的结果传递进来,我们可以通过这个结果再进行分支操作
-
-
访问其他程序中的数据
-
内容提供器的两种用法:
-
使用现有的内容提供器来读取和操作相应程序中的数据
-
创建自己的内容提供器给自己的应用程序的数据提供访问接口
-
-
ContentResolver :访问内容提供器的数据
-
获取实例:Context.getContentResovler()方法,实例提供了对数据进行CRUD操作的方法
-
insert
-
update
-
delete
-
query
-
-
内容URI:内容URI给内容提供器的数据建立了唯一的标识符。他主要由两部分组成
-
authority:用于对不同应用程序作区分,一般都会采用包名的方式来命名
-
path:用于对同一应用程序的不同的表做区分,
-
最后需要在URI的开头加上协议声明:content://
-
-
-
-
自定义ContentProvider
-
编写一个类继承ContentProvider,重写全部方法
-
onCreate:初始化内容提供器的时候调用,通常对数据库的创建和升级等操作,返回true表示初始化成功,返回false表示失败。当存在ContentResolver尝试访问我们程序中的数据时,提供器才会被初始化
-
在静态代码块给UriMatcher addUri()添加匹配的规则,有三个参数
-
authority
-
path
-
resultCode
-
通过UriMatcher实例的match方法返回的resultCode判断访问者期望访问的数据
-
-
query
-
insert
-
update
-
delete
-
getType:根据传入的URI判断mineType
-
-