Android内容提供器

需要别的应用的数据时,需要获得权限因为有一些涉及到用户的隐私性,而android6.0以后就有运行时权限的功能了
1.在AndroidManifest.xml文件中添加权限,在安装时会讯问用户是否同意。一些普通的权限系统会自动同意,而一些危险的就需要用户授权了,以下是危险的权限
Android内容提供器_第1张图片
2.运行时权限
Android内容提供器_第2张图片
首先我们用ContextCompat.checkSelfPermission()来判断,用户是否已经给我们授权,他接受两个参数,第一个是Context,而第二个是具体的权限名,比如Manifest.permission.CALL_PHONE,返回值与PackageManager.PERMISSION_GRANTED做比较,相同就说明用户已经授权了,
如果授权了,使用Intent完成你想要的操作就可以了,如果没有授权,那么我们使用ActivityCompat.requestPermissions来向用户申请权限,他接受三个参数,一个是Activity的实例,另一个是String数组,把要申请的权限给他,第三个就是请求码
当询问完用户会回调onRequestPermissionResult(),我们需要判断他是否同意了,同意了我们就直接进行我们要得操作,不然就告诉用户他拒绝了

申请权限的事我们做完了,我们下面就进入正题,访问其他程序的内容
如果想要访问内容提供器中共享的数据,那么就要借助ContentResolver类,
使用getContentResolver方法获取到该类的实例,而他的CRUD操作,和数据库类似,insert方法用于添加数据,upodate更新,delete删除,query查询
而和数据库不同的是,药房问那个内容使用的是URI
Android内容提供器_第3张图片
然后我们将它解析成Uri对象

Uri uri = Uri.parse("content://com.example.app.provider/table1");

有了uri我们就需要进行查询

Cusor cursor = getContentResolver().query(
            uri,
            projection,
            selection,
            selectionArgs,
            sortOrder);

Android内容提供器_第4张图片
Android内容提供器_第5张图片

有时候我们还需要自己的应用程序提供内容
Android内容提供器_第6张图片
Android内容提供器_第7张图片
Android内容提供器_第8张图片
我们可以借助UriMatcher这个类,通过addURI方法将我们可以识别的的Uri添加进去,他接受三个参数第一个是authority,第二个是path,第三个是自己定义的代码,这样子当调用match时我们,我们会得到自己定义的代码,这样子就可知道想对我们的内容提供器做什么操作
Android内容提供器_第9张图片
Android内容提供器_第10张图片

然后在相对应的类中把方法完善即可

你可能感兴趣的:(Android)