Android 6.0权限请求相关及权限分组方法

Android M(6.0)API 23后加入了权限请求设置,APP需要使用某些权限需要主动申请。

权限分为3类,一组是Normal权限,无需申请,另一组是Dangerous,需申请,然后是特殊权限,需申请。

先看下Normal权限列表:

再看下Dangerous权限列表:

危险权限实际上才是运行时权限主要处理的对象,这些权限可能引起隐私问题或者影响其他程序运行。Android中的危险权限可以归为以下几个分组:

CALENDAR
CAMERA
CONTACTS
LOCATION
MICROPHONE
PHONE
SENSORS
SMS
STORAGE

各个权限分组与其具体的权限,可以参考下图:

想要不支持运行时权限机制很简单,只需要将targetSdkVersion设置低于23就可以了,意思是告诉系统,我还没有完全在API 23(6.0)上完全搞定,不要给我启动新的特性。

特殊权限:

就是一些特别敏感的权限,在Android系统中,主要由两个

SYSTEM_ALERT_WINDOW,设置悬浮窗,进行一些黑科技

WRITE_SETTINGS 修改系统设置

关于上面两个特殊权限的授权,做法是使用startActivityForResult启动授权界面来完成。

请求SYSTEM_ALERT_WINDOW

private static final int REQUEST_CODE = 1;
private void requestAlertWindowPermission() {
 Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
 intent.setData(Uri.parse("package:" + getPackageName()));
 startActivityForResult(intent, REQUEST_CODE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 super.onActivityResult(requestCode, resultCode, data);
 if (requestCode == REQUEST_CODE) {
 if (Settings.canDrawOverlays(this)) {
  Log.i(LOGTAG, "onActivityResult granted");
 }
 }
}

上述代码需要注意的是

使用Action Settings.ACTION_MANAGE_OVERLAY_PERMISSION启动隐式Intent

使用"package:" + getPackageName()携带App的包名信息

使用Settings.canDrawOverlays方法判断授权结果

请求WRITE_SETTINGS

private static final int REQUEST_CODE_WRITE_SETTINGS = 2;
private void requestWriteSettings() {
 Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
 intent.setData(Uri.parse("package:" + getPackageName()));
 startActivityForResult(intent, REQUEST_CODE_WRITE_SETTINGS );
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 super.onActivityResult(requestCode, resultCode, data);
 if (requestCode == REQUEST_CODE_WRITE_SETTINGS) {
 if (Settings.System.canWrite(this)) {
  Log.i(LOGTAG, "onActivityResult write settings granted" );
 }
 }
}

上述代码需要注意的是

使用Action Settings.ACTION_MANAGE_WRITE_SETTINGS 启动隐式Intent

使用"package:" + getPackageName()携带App的包名信息

使用Settings.System.canWrite方法检测授权结果

注意:关于这两个特殊权限,一般不建议应用申请。

其实你不需要每个权限都去显式申请,举一个例子,如果你的应用授权了读取联系人的权限,那么你的应用也是被赋予了写入联系人的权限。因为读取联系人和写入联系人这两个权限都属于联系人权限分组,所以一旦组内某个权限被允许,该组的其他权限也是被允许的。

以上这篇Android 6.0权限请求相关及权限分组方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 详解Android权限管理之Android 6.0运行时权限及解决办法

    前言: 今天还是围绕着最近面试的一个热门话题Android 6.0权限适配来总结学习,其实Android 6.0权限适配我们公司是在今年5月份才开始做,算是比较晚的吧,不过现在Android 6.0以上设备越来越多了,所以Android 6.0 权限适配是必不可少的工作,这里主要介绍一下我们公司是如何做Android 6.0权限适配的. Android 6.0以下非运行时权限: 根据上面博客我们很清楚的知道,Android的权限其实就是为了程序之间更加的安全的访问,所以权限有等级之分,比如:No

  • Android 6.0权限申请详解及权限资料整理

    在android 6.0开始,部分的权限需要我们动态申请,也就是说当我们的打开app的时候系统不会主动像您申请app所需要的部分权限,需要客户在使用app的时候主动的去申请. 一.权限的申请两步骤: 1.权限申请: /** * @param permissions需要申请的权限 * @param requestCode申请回调code */ public static void requestPermissions(final @NonNull Activity activity,final @

  • 关于Android 6.0权限的动态适配详解

    前言 Android6.0代号棉花糖.尽管是在15年I/O大会上Google被正式发布的了.但是看看大多数人的项目中大家的 targetSdkVersion 是不是还都用的22.大家都认为6.0+的市场占有率还没那么高.那么就请看谷歌2017年9月份公布的版本分布图. 从数据来看确实没那么高O(∩_∩)O.6.0+的市场占有率仅为50% ̄□ ̄||.只因安卓用户的基数太大了吧.延伸至各种人群.虽然说占比才一半但时基数大总的用户数量还是蛮多的.这两天刚做完6.0权限的适配.那么请说一下自己测试的时候

  • 安卓Android6.0权限动态获取操作示例

    本文实例讲述了安卓Android6.0权限动态获取操作.分享给大家供大家参考,具体如下: 众所周知 , 安卓6.0现在运用的越来越广泛 , 因为相对于之前的几个版本 , 对于用户权限这个概念确实不是很重视 , 而6.0 之后 , 为了提升用户的操作安全性 ,  运行时权限诞生了, 就是在用户运行软件的时候动态获取所需要的权限 , 下面跟大家分享一个我的代码案例 : import android.Manifest; import android.app.AlertDialog; import an

  • Android 6.0权限请求相关及权限分组方法

    Android M(6.0)API 23后加入了权限请求设置,APP需要使用某些权限需要主动申请. 权限分为3类,一组是Normal权限,无需申请,另一组是Dangerous,需申请,然后是特殊权限,需申请. 先看下Normal权限列表: 再看下Dangerous权限列表: 危险权限实际上才是运行时权限主要处理的对象,这些权限可能引起隐私问题或者影响其他程序运行.Android中的危险权限可以归为以下几个分组: CALENDAR CAMERA CONTACTS LOCATION MICROPHO

  • android 6.0 写入SD卡的权限申请实例讲解

    6.0的手机对于写入手机需要申请权限的 我做了如下处理 下面我贴出代码 package com.example.admin.sdapplication; import android.Manifest; import android.app.Dialog; import android.content.DialogInterface; import android.content.pm.PackageManager; import android.os.Build; import android

  • android 6.0下webview的定位权限设置方法

    如下所示: WebView webView = (WebView)findViewById(R.id.webview); WebSettings webSettings = webView.getSettings(); //webview支持js脚本 webSettings.setJavaScriptEnabled(true); //启用数据库 webSettings.setDatabaseEnabled(true); //设置定位的数据库路径 String dir = this.getAppl

  • Android 6.0 无法在SD卡创建目录的方法

    摘要 今天开发中遇到一个问题,项目无法在Android6.0设备的SD卡创建目录,在Android6.0以下的移动设备测试了5.0 .4.3的设备,均正常,但是在Android6.0却不正常. 经过排查,执行下列代码无法在6.0的设备上面创建目录 File dir = new File(DbConfig.BASE_PATH); if (!dir.exists()) { dir.mkdirs(); } 衍生知识 2015年5月29日中Google I/O开发者大会,Google 发布了 Andro

  • Android 7.0开发获取存储设备信息的方法

    本文实例讲述了 Android 7.0开发获取存储设备信息的方法.分享给大家供大家参考,具体如下: Android 7.0开发相较之前有不少改进,具体可参考前面的文章Android7.0版本影响开发的改进分析,这里简单总结一下Android 7.0针对存储设备的简单操作方法. MountPoint 我们通过MountPoint来描述android设备信息 private static class MountPoint { String mDescription; String mPath; bo

  • android实现http中请求访问添加cookie的方法

    本文实例讲述了android实现http中请求访问添加cookie的方法.分享给大家供大家参考,具体如下: 第一种 HashMap<String, String> map = new HashMap<String, String>(); map.put("cookie","p1u_id=4eb591e73554db0f4d3300cb656113abfb968ef6b0ee2b5de0a35caa5217c51faa028b453576b35c&quo

  • Android 5.0以上Toast不显示的解决方法

    原因分析 用户使用android 5.0以上的系统在安装APP时,将消息通知的权限关闭掉了.实际上用户本意只是想关闭Notification,但是Toast的show方法中有调用INotificationManager这个类,而这个类在用户关闭消息通知权限的同时被禁用了,所以我们的吐司无法显示. Toast.show() 效果图 自定义Toast(上)与Toast(下)比对 问题解决 既然系统不允许我们调用Toast,那么我们就自立门户--自己写一个Toast出来.我们总体的思路是:在Activ

  • Android实现获取应用程序相关信息列表的方法

    本文所述为Androdi获取手机应用列表的方法,比如获取到Android应用的软件属性.大小和应用程序路径.应用名称等,获取所有已安装的Android应用列表,包括那些卸载了的,但没有清除数据的应用程序,同时在获取到应用信息的时候,判断是不是系统的应用程序,这是一个应用管理器所必需具备的功能. 具体实现代码如下: //AppInfoProvider.java package com.xh.ui; import java.util.ArrayList; import java.util.List;

  • Android 4.0 设置全屏修改的解决方法

    最近在做一个平板的应用,底部的BACK HOME 还有电池WIFI的那一条STATUS_BAR设置全屏后怎么也去不掉,查找资料后,发现一个比较好的方法,在此分享 第一种方式(程序代码): 在OnCreate里添加一行语句 复制代码 代码如下: getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE); 在setContentView之前哦. 过时的一个方法: 复制代码 代码如下: getWi

  • React-Native之Android(6.0及以上)权限申请详解

    为什么Android要申请权限 简单说下在Android6.0及6.0以上一些google认为涉及"危险和用户隐私"的一些权限不仅要做清单文件(android/app/src/AndroidMainfest.xml)里面申请,还有单独调用api,去让用户选择是否同意你申请这个权限. 例如:你想要你的app有读写手机外置内存卡权限,那么你需要在清单文件里面加下面两行看字母应该懂的吧.但如果你的(android/app/build.gradle)里的 android{defaultConf

随机推荐