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;
  }
 }
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持我们!

(0)

相关推荐

  • android编程判断应用是否具有某个权限的方法

    本文实例讲述了android编程判断应用是否具有某个权限的方法.分享给大家供大家参考,具体如下: android在开发中有时候要判断应用中是否有某项权限,或者想获取到某个应用的权限清单,可以使用以下方法 1) 判断应用是否具有某个权限 PackageManager pm = getPackageManager(); boolean permission = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.perm

  • Android判断用户是否允许了摄像头权限实例代码

    如题,既然是判断用户是否允许了摄像头权限,那么,咱们就忽略是Manifest配置的问题,因为这是开发者的事. 用户在使用APP时,如果首次进入用摄像头的地方,手机会提示是否允许该应用使用摄像头.有些用户小手一抖.或者压根就不想开启摄像头,咔擦,就给你关了,那好了.下回再进入该功能,就会出现APP一片黑,或者崩溃的情况. 作为开发者,正常思路是要提示用户,摄像头权限被你关了,赶紧去手动开启,不然,就别想用该功能了!那,咱们该怎么实现这个思路呢? 一.判断摄像头权限 Android API没提供判断

  • Android 手动获取判断处理权限

    主要用到的几个方法: //检查权限 int checkSelfPermission(String) //申请权限 void requestPermissions(int, String...) //是否应该显示请求权限的说明 boolean shouldShowRequestPermissionRationale(String) //处理权限结果回调 void onRequestPermissionsResult(int,String[],int[]) 是否有权限常量标识: PackageMan

  • Android手动检查并申请权限方法

    Android权限一般是在AndroidManifest.xml中声明,在安装或首次使用的时候系统会自动提示用户是否提供权限 Android官方文档: Then, when the application is installed on the device, the installer determines whether or not to grant the requested permission by checking the authorities that signed the a

  • Android 获取判断是否有悬浮窗权限的方法

    现在很多应用都会用到悬浮窗,很多国产rom把悬浮窗权限加入控制了,你就需要判断是否有悬浮窗权限,然后做对应操作. Android 原生有自带权限管理的,只是被隐藏了.看android源码在android.app下就有个AppOpsManager类. 类说明如下: /** * API for interacting with "application operation" tracking. * * <p>This API is not generally intended

  • Android开发之permission动态权限获取详解

    Android开发之permission动态权限获取,供大家参考,具体内容如下 说明 Android 6.0 (API 23) 之前应用的权限在安装时全部授予,运行时应用不再需要询问用户.在 Android 6.0 或更高版本对权限进行了分类,对某些涉及到用户隐私的权限可在运行时根据用户的需要动态授予.这样就不需要在安装时被强迫同意某些权限. 设备系统是 Android 6.0 (API 23) 或更高版本,并且应用的 targetSdkVersion 是 23 或更高版本,则针对在 Andro

  • Android判断某个权限是否开启的方法

    如下所示: /** * 读写权限 自己可以添加需要判断的权限 */ public static String[]permissionsREAD={ Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE }; /** * 判断权限集合 * permissions 权限数组 * return true-表示没有改权限 false-表示权限已开启 */ public static bo

  • Android获取超级管理员权限的实现

    1.定义特殊的广播接收者,系统超级管理员的广播接收者 public class MyDeviceAdminReceiver extends DeviceAdminReceiver{ @Override public void onReceive(Context context,Intent intent){ //TODO } } 2.在AndroidManifest.xml文件中,注册超级管理员的广播接收者 <receiver android:name="com.example.recei

  • Android手机获取root权限并实现关机重启功能的方法

    本文实例讲述了Android手机获取root权限并实现关机重启功能的方法,是Android程序设计中非常常见的重要功能.现分享给大家,供大家在Android程序开发中参考之用. 具体功能代码如下: /* * 执行命令 * @param command * 1.获取root权限 "chmod 777 "+getPackageCodePath() * 2.关机 reboot -p * 3.重启 reboot */ public static boolean execCmd(String c

  • Android编程获取网络连接方式及判断手机卡所属运营商的方法

    本文实例讲述了Android编程获取网络连接方式及判断手机卡所属运营商的方法.分享给大家供大家参考,具体如下: 问题:项目中写的网络模块,感觉有点乱:两套代码 --模拟器.真机,维护起来十分麻烦. 解决办法:代码自动去检查到那种网络环境,然后调用不同的联网方式. 查看了模拟器上默认的接入点:移动网络 -- APN = "internet" 1.通过获取apn的名称,来判断网络 // 获取Mobile网络下的cmwap.cmnet private int getCurrentApnInU

  • Android 操作系统获取Root权限 原理详细解析

    android root权限破解分析 许多机友新购来的Android机器没有破解过Root权限,无法使用一些需要高权限的软件,以及进行一些高权限的操作,其实破解手机Root权限是比较简单及安全的,破解Root权限的原理就是在手机的/system/bin/或/system/xbin/目录下放置一个可执行文件"su",这是一个二进制文件,相当于电脑上的exe文件,仅仅在系统中置入这个"su"文件是不会给手机的软件或硬件造成任何故障. 下面的代码是android系统原版的

  • Android网络连接判断与相关处理

    本文为大家分享了Android网络连接判断与相关处理,供大家参考,具体内容如下 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限.  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 1)判断是否有网络连接 public boolean isNetworkConnected(Context context) { if (context != nul

随机推荐