在 Android 6.0 (API 23) 及以上版本,权限模型有了很大的变化。在这之前我们需要在 Manifest 文件里面声明所有的权限,然后在安装的时候会被一次性授予。但是从 6.0 开始,一部分敏感权限的授予转变成了运行时权限,即应用在运行的时候请求用户授予相关权限。
这种方式肯定会为开发者带来一些困扰,如何在运行的时候权衡权限请求的时机,以及如何处理用户拒绝权限请求等,都是需要考虑的问题。
- 检查单个权限
在具体的代码实现中,我们首先需要进行权限的检查,判断当前应用的权限是否已经被用户授权,这可以通过 ContextCompat.checkSelfPermission() 方法进行检查。
if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
// Permission is not granted
}
-
权限请求
如果应用当前没有所需的权限,就需要对用户进行权限请求,Android 提供了 ActivityCompat.requestPermissions() 方法进行请求。ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.READ_CONTACTS}, MY_PERMISSIONS_REQUEST_READ_CONTACTS);
-
处理权限请求结果
用户在权限对话框中做出授权或拒绝的操作后,系统会回调应用的 onRequestPermissionsResult() 方法,我们可以在这个方法中处理请求的结果。@Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case MY_PERMISSIONS_REQUEST_READ_CONTACTS: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // permission was granted } else { // permission denied } return; } // other cases } }
这种变化,改变了用户的权限授予方式,也减小了用户的隐私泄露风险,让用户对自己的隐私有更多的掌控权。
发布者:luotuoemo,转转请注明出处:https://www.jintuiyun.com/171805.html