作者:Henry
在android 6.0版本之后,系统不会在软件安装的时候就赋予该app所有其申请的权限,对于一些危险级别的权限,app需要在运行时一个一个询问用户授予权限。那么问题来了,是不是所有以前发布的app都会出现问题呢?答案是不会,只有那些targetSdkVersion 设置为23和23以上的应用才会出现异常。以下以笔者开发的视频app为例来说明:
是不是所有权限都需要去进行特殊处理呢?不是,只有那些危险级别的权限才需要,android开发者官网有相关描述:
http://developer.android.com/training/permissions/requesting.html
http://developer.android.com/guide/topics/security/permissions.html
所以仔细去看看自己的app,对照列表,如果有需要申请其中的一个权限,就需要进行特殊操作。还有一个比较人性的地方就是如果同一组的任何一个权限被授权了,其他权限也自动被授权。例如,一旦WRITE_EXTERNAL_STORAGE被授权了,app也有READ_EXTERNAL_STORAGE权限了。
接着下一步当然就是要修改代码了,因视频程序需要使用到外部存取空间, 因此需要申请WRITE_EXTERNAL_STORAGE权限, 所以在执行之前我们需要进行特殊处理
inthasWriteContactsPermission =checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
if(hasWriteContactsPermission !=PackageManager.PERMISSION_GRANTED) {
requestPermissions(newString[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
CODE_FOR_WRITE_PERMISSION);
return;
写完这段代码之后,就会出现如下系统dialog, 如上图所示
紧接着就需要去处理DENY和ALLOW的回调了,重写onRequestPermissionsResult函数:
@Override
publicvoidonRequestPermissionsResult(intrequestCode,String[] permissions, int[] grantResults) {
if(requestCode ==CODE_FOR_WRITE_PERMISSION){
if(permissions[0].equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)
&&grantResults[0]== PackageManager.PERMISSION_GRANTED){
//用户同意使用
}else{
//用户不同意,自行处理即可
finish();
}
}
好了,这样就算是适配完成了。
本文介绍在Android 6.0及更高版本中如何处理运行时权限请求,特别是针对WRITE_EXTERNAL_STORAGE权限的具体实现方法。
1896

被折叠的 条评论
为什么被折叠?



