这篇文章给大家介绍Android 应用中怎么获取判断处理权限,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
主要用到的几个方法:
//检查权限 int checkSelfPermission(String) //申请权限 void requestPermissions(int, String...) //是否应该显示请求权限的说明 boolean shouldShowRequestPermissionRationale(String) //处理权限结果回调 void onRequestPermissionsResult(int,String[],int[])
是否有权限常量标识:
PackageManager.PERMISSION_DENIED:拒绝了。 PackageManager.PERMISSION_GRANTED:授权了
上述四个方法中,前三个方法在support-v4的ActivityCompat中都有,建议使用兼容库中的方法。最后一个方法是用户授权或者拒绝某个权限组时系统会回调Activity或者Fragment中的方法。
1. checkSelfPermission(String)
检查权限
1. 检查某一个权限的当前状态,你应该在请求某个权限时检查这个权限是否已经被用户授权,已经授权的权限重复申请可能会让用户产生厌烦。
2. 该方法有一个参数是权限名称,有一个int的返回值,用这个值与上面提到的两个常量做比较可判断检查的权限当前的状态。
if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { // 没有权限,可以在这里重新申请权限。 }else{ // 有权限了。 }
2. requestPermissions(int, String…)
申请权限
请求用户授权几个权限,调用后系统会显示一个请求用户授权的提示对话框,App不能配置和修改这个对话框,如果需要提示用户这个权限相关的信息或说明,需要在调用 requestPermissions() 之前处理
该方法有两个参数:
int requestCode: 会在回调onRequestPermissionsResult()时返回,用来判断是哪个授权申请的回调。
String[] permissions: 权限数组,你需要申请的的权限的数组。
由于该方法是异步的,所以无返回值,当用户处理完授权操作时,会回调Activity或者Fragment的onRequestPermissionsResult()方法。
ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_CONTACTS}, MMM);
3. onRequestPermissionsResult(int,String[],int[])
处理权限结果回调
1. 该方法在Activity/Fragment中应该被重写,当用户处理完授权操作时,系统会自动回调该方法
2. 该方法有三个参数:
int requestCode: 在调用requestPermissions()时的第一个参数。
String[] permissions: 权限数组,在调用requestPermissions()时的第二个参数。
int[] grantResults: 授权结果数组,对应permissions,具体值和上方提到的PackageManager中的两个常量做比较。
@Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case MMM: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 权限被用户同意,可以做你要做的事情了。 } else { // 权限被用户拒绝了,可以提示用户,关闭界面等等。 } return; } } }
4. shouldShowRequestPermissionRationale(String)
是否应该显示请求权限的说
1.第一次请求权限时,用户拒绝了,调用shouldShowRequestPermissionRationale()后返回true,应该显示一些为什么需要这个权限的说明。
2.用户在第一次拒绝某个权限后,下次再次申请时,授权的dialog中将会出现“不再提醒”选项,一旦选中勾选了,那么下次申请将不会提示用户。
3.第二次请求权限时,用户拒绝了,并选择了“不在提醒”的选项,调用shouldShowRequestPermissionRationale()后返回false。
4.设备的策略禁止当前应用获取这个权限的授权:shouldShowRequestPermissionRationale()返回false 。
5.加这个提醒的好处在于,用户拒绝过一次权限后我们再次申请时可以提醒该权限的重要性,面得再次申请时用户勾选“不再提醒”并决绝,导致下次申请权限直接失败。
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {// 没有权限。 if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_CONTACTS)) { // 用户拒绝过这个权限了,应该提示用户,为什么需要这个权限。 } else { // 申请授权。 ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.READ_CONTACTS}, MMM); } } ... @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case MMM: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 权限被用户同意。 } else { // 权限被用户拒绝了。 } return; } } }
关于Android 应用中怎么获取判断处理权限就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。