Android系统6.0之后的应用权限管理策略做了改动,把权限做了安全的划分:普通权限和需要申请的用户权限。
-
普通权限
如果你的应用仅支持6.0以下手机,不需要考虑,系统不会做这个检查策略。
如果你的应用支持6.0以上且不需要访问用户隐私相关的意图,这个也不需要做检查。(除了用户权限的9大安全,其他照旧)
普通权限处理方式只需要在AndroidManifest.xml中直接申请即可,用户在安装的时候知道有这个权限就行。 -
用户权限
该权限是在6.0以上需要做提前声明并提示用户手动允许的才可以继续操作,否则应用会出现崩溃。
该部分应用涉及9大分组,每个分组只要同意了一个权限,同分组的其他全向一并获取,也就是说9大分组告诉用户应用会涉及他的哪部分信息。所有的权限可以查看Manifest.java查看
//1.日历相关
public static final String CALENDAR = "android.permission-group.CALENDAR";
//2.相机相关
public static final String CAMERA = "android.permission-group.CAMERA";
//3.联系人相关
public static final String CONTACTS = "android.permission-group.CONTACTS";
//4.位置相关
public static final String LOCATION = "android.permission-group.LOCATION";
//5.麦克风相关
public static final String MICROPHONE = "android.permission-group.MICROPHONE";
//6.手机信息相关
public static final String PHONE = "android.permission-group.PHONE";
//7.传感器相关
public static final String SENSORS = "android.permission-group.SENSORS";
//8.短信相关
public static final String SMS = "android.permission-group.SMS";
//9.存储相关
public static final String STORAGE = "android.permission-group.STORAGE";
用户权限使用也需要现在AndoridManifest.xml中声明,并且在运行时需要做授权检查。
相关API
//检查是否已经授权某权限
//PackageManager.PERMISSION_GRANTED 0
//PackageManager.PERMISSION_DENIED -1
ActivityCompat.checkSelfPermission(Activity activity, Stirng permission)
//请求授权
requestPermissions(Activity activity, String[] permissions,int requestCode)
//授权回调
onRequestPermissionsResult(int requestCode, String[] permissions,int[] grantResults)
目前高版本的AS已经自动检测存在权限风险的代码,如果自己已经封装或者确定获取了权限,可去掉该相关Lint检查或try一下。(有代码洁癖的人绝对忍受不了报个红叉)
网友评论