Android检查应用权限是否被禁用,解决权限被禁用时程序崩溃

原创 2016年05月31日 14:43:10

一、问题描述

在Android开发中,往往会用到许多诸如摄像头、录音等权限。但是,我们都知道,小米、魅族等定制系统,或者360等安全软件在程序请求打开相机、录音等操作时,会先弹出对话框提示用户是否允许程序执行这些操作,如果用户选择允许则接下来的操作一切正常,如果用户选择拒绝之后,程序后面的工作将无法正常允许,甚至崩溃。

那么如何判断用户是拒绝还是允许了该权限呢?


二、错误的判断方式

在我到网上搜索这个问题的过程中,搜到了很多如下的判断方式,然而这其实是无效的(),先贴出代码看一下:

		boolean permission = (PackageManager.PERMISSION_GRANTED == getPackageManager()
				.checkPermission("android.permission.CAMERA", getPackageName()));
		if (permission) {
			Toast.makeText(this, "有这个权限", Toast.LENGTH_SHORT).show();
		} else {
			Toast.makeText(this, "没有这个权限", Toast.LENGTH_SHORT).show();
		}
如上,这段代码其实只是判断了你的程序是否在manifest文件中声明了某权限,并无法判断用户是否拒绝了某权限。


三、问题研究

当我们打开系统的应用权限管理或者安全软件的权限管理时,可以看到程序申请的权限列表,但是一些敏感权限都是有3种状态的,即“允许”、“提醒”、“禁用”。所以我们需要的不是判断权限是否在manifest文件中声明了没有,而是判断程序的权限状态到底是允许还是禁用。

然而,遗憾的是,安卓中貌似并没有这样的方法可以判断这个状态,也许后续的Android版本会有吧。但是我们也可以通过一些别的方法去判断和处理这个问题的


四、问题解决

建议就直接使用try-catch这种暴力的解决方法吧,将相应代码try-catch起来,然后在catch块中提示用户打开相应权限。

	try {
		mCamera = Camera.open(0); // 任意可能被拒绝权限程序崩溃的代码
	} catch (RuntimeException e) {
		e.printStackTrace();
		Toast.makeText(getActivity(), "请打开xx权限", Toast.LENGTH_LONG).show();
	}
如果是发送短信等权限,则可以通过判断短信是否发送成功判断


版权声明:本文为博主原创文章,未经博主允许不得转载。

关于Android权限被禁止的问题

目前为止,我没有发现有任何一种方式能够获取到权限是否被禁止。 网上流传的:checkCallingOrSelfPermission来获取,其实获取的是你是否声明。 分析其原因:这些对权限的禁止,并不是...

Android怎么通过代码判断是否权限被禁止

//如读写权限 private boolean checkWriteExternalPermission() {     String permission = "android.permi...
  • bjstyle
  • bjstyle
  • 2015年08月31日 10:20
  • 2680

Android录音权限被禁解决方案

前言在科比最后一次告别演出的日子,写此博客致敬伟大的球员,或许NBA会再次出现和科比一样伟大的球员,但我们再也没有第二个青春去追随。 好了,不废话了,大家在做Android录音的时候会碰到权限被禁止...

android判断应用是否有某个权限

android在开发中有时候要判断应用中是否有某项权限,或者想获取到某个应用的权限清单,可以使用以下方法 1) 判断应用是否具有某个权限 PackageManager pm = getPack...

Android手动检查并申请权限

Android权限,手动检查并申请权限,Android6.0

Android权限判断checkPermission

判断本程序是否拥有某权限的方法: private static final String EXTERNAL_STORAGE_PERMISSION = "android.permission.WRIT...

android6.0动态权限,以及如何同时授予多个权限,当用户禁用的后续处理

什么情况下需要动态获取权限: 满足两个条件:①6.0以上系统 ②编译版本(compileSdkVersion)API23以上 Android6.0 运行时权限,相关的方法主要有四个: 1、检查是否授予...

android 应用开启以后,动态检测并或者相机权限。

针对android 6.0(API 23)以前的版本,只需要在【AndroidManifedt.xml】里面添加应用权限,应用安装完成以后即可正常使用。 但是,对于android 6....

Android之权限检查(解决未获取用户权限允许)

本文主要是记录一些零碎的东西 最近在项目中发现需要做Android的权限检查,要不然会在某些机型上失败。 API23以上的版本有提供好权限申请,具体参考API:https://developer....

摄像头权限被拒绝导致程序崩溃的问题(6.0以下版本)

最近做到一个扫码功能,需要在设备上请求摄像头权限,但是如果用户拒绝了该权限程序就会崩溃。在网上找了很多关于这个问题的解决方法,但是都没能很好的解决问题。下面给出自己的解决方案 有两点值得注意的 1...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android检查应用权限是否被禁用,解决权限被禁用时程序崩溃
举报原因:
原因补充:

(最多只允许输入30个字)