Android M App Permissions

Android new app permissions model

Android M new app permissions model,其中重点是Runtime Permissions,本文

介绍新权限系统模型和描述Runtime Permissions的机制和注意事项。

目录

前言...3

1、为什么需要新的权限系统?...4

2、新应用权限模型使用详解...4

2.1、新应用权限模型概述...4

2.1.1、声明权限...4

2.1.2、权限组...5

2.1.3、限制安装时授权...5

2.1.4、运行时授权...5

2.1.5、运行时需要一直检查权限...5

2.1.6、提示权限意图...5

2.1.7、撤回授权...6

2.2、打开新权限模型...6

2.3、定制Android M权限...6

2.4、权限组...7

2.5、运行时授权过程...8

2.5.1、检测设备系统版本...8

2.5.2、检测应用是否拥有权限...9

2.5.3、提示授权意图...9

2.5.4、请求权限...10

2.5.5、处理请求结果...10

2.6、Normal permissions授权问题...10

3、不要压垮用户...12

4、用ADB调试新权限模型...13

4.1、adb install13

4.2、授权和撤销授权...13

5、Intent代替授权...13

6、例子...14

Android M App Permissions

前言

Android M(Marshmallow,棉花糖),亦称Android 6.0,是Google在2015年 Google I/O大会上正式发布。Android M相比Android L有六项重大的改进,其中之一便是App Permissions(软件权限管理),即New permissions model,主要特征是在Android M以前的版本是安装时授权,Android M 是运行时授权。

1、为什么需要新的权限系统?

引用官方解析,新的权限系统能够给用户带来美好的感受,能让用户更加方便的安装应用和明确了解应用需要什么权限和做什么事情,令用户使用App更加舒适。

Android M系统的权限一直都是倍受争论的模块,因为Android的个性化程度非常高,包括App开发的权限也是在Manifest文件中申明便可拥有相应的权限,所以,安全性一直令人担忧。所以Android在安全问题不断的向前发展,包括之前的默认SMS app才能发送接收SMS message,到Android M 的新权限模型。

2、新应用权限模型使用详解

2.1、新应用权限模型概述

在新应用全新模型中怎么去开发App应用呢?主要有以下几点:

2.1.1、声明权限

和之前的把版本一样,需要在manifest文件中声明应用需要的权限。

2.1.2、权限组

可以使用权限组代替单一的权限声明,也就是说权限组可以代替两个或更多的单一权限。例如,联系人写权限和读权限,可以用联系人操作权限来代替。

2.1.3、限制安装时授权

在Android M以前的版本都是在App安装时给应用授权,Android M也有安装时授权,不过只有normal permissions可以在安装时授权,其它权限需要在运行时授权。

2.1.4、运行时授权

非normal permission在App运行时向system请求相应的权限,这点就是new app permissions和老版本的最大不同点。

2.1.5、运行时需要一直检查权限

在应用需要用某权限的功能之前,都需要检查应用当前是否具有该权限。

2.1.6、提示权限意图

在Android M中,如果应用没有顺利获取到使用某功能的权限,可以向用户提示应用需要使用什么权限去做什么事情。

2.1.7、撤回授权

在新应用权限模型中用户可以更加方便的管理应用的权限,即户可以在设置里面对应用的权限进行集中管理,关闭或打开。

2.2、打开新权限模型

Android为了保持向下兼容,Android需要保证M版本SDK编译的App能够在M和M以前的版本中正常运行,需要保证M以前的版本的SDK编译的App能够在M和M以前的版本中正常运行。也就是说,目前只有在特定的条件下,新权限模型才会起作用。要打开该模型,需要设置targetSdkVersion为Android 6.0,设置compile­SdkVersion为SDK 23。

2.3、定制Android M权限

在M以前的版本中,都是在安装时授权,所以在App安装时会列出应用在manifest文件中定义的所有的权限,而M需要在运行时授权,所以在安装App时不提示权限。在M以前的版本中用<uses-permission>标签声明权限,所以在M之前版本中,如果App安装时不需要提示用户应用需要的权限,则用<uses-permission-sdk-m>标签来声明权限。<uses-permission-sdk-m>标签在M中效果和<uses-permission>一样。

2.4、权限组

使用权限组可以减少授权操作。例如,发送短信需要请求android.permission.SEND_SMS权限,接收短信需要请求android.permission.RECEIVE_SMS权限,这个时候就需要进行两次授权,所以,在这里,App就可以用权限组来代替,上面两个权限可以用android.permission-group.SMS来代替。Android 中的权限组如下:

图 1

2.5、运行时授权过程

2.5.1、检测设备系统版本

因为运行时授权仅有在M版本时才需要,所以是否启动权限请求前,应该判断当前用户设备的Android版本,如果是M版本则请求权限,如果是M以前的版本或M以前的版本编译的App,则不需要请求权限。Android M的target号是MNC,所以,代码中可以用Build.VERSION.CODENAME来获取编译版本号,Android M的CODENAME便是MNC。Build.VERSION.RELEASE获取设备Android版本号,M便是6.0,或获取targetSdk,Build.VERSION.­SDK_INT,M便是23.

2.5.2、检测应用是否拥有权限

在请求前需要检测某权限在以前是否已经被用户授权,如果用户已经授权过,则不需要重新请求权限,如果用户没有授权过,则需要请求该权限。检测是否拥有该权限,可以Context.check­SelfPermission(permission_name)方法来判断。但是该方法是在api 23中添加的,所以在minSdkVersion <23中使用是会报错的。为了兼容底版本,Android一向解决方法便是增量包,所以,可以通过v4包的PermissionChecker.checkSelfPermission()方法或ContextCompat.checkSelfPermission()方法来判断。

2.5.3、提示授权意图

提示用户授权意图,即提示用户App需要什么权限,App去干什么事情,令用户知道App所获取权限的目的和安全性,以便用户可以更好理解或管理相应的权限,以达到提高用户体验的目。Android M平台可以用Activity.shouldShowRequestPermission­Rationale(String)来判断,M以前的则需要使用Activity­Compat.should­ShowRequest­PermissionRationale()。该方法在用户拒接过授权时才会返回true。

2.5.4、请求权限

请求授权就是真正的向系统请求App所需要的权限了,可以调用Activity.requestPermissions(String[], int)方法来请求。调用该方法后,便系统便会弹出授权的dialog。参数String[]可以让App同时请求多个权限。

2.5.5、处理请求结果

在2.5.4后,当用户操作完毕,便会回调结果到App,App需要复写onRequestPermissionsResult(int requestCode,String[] permissions, int[] grantResults)方法,在该方法中可以处理用户授权的结果。

2.6、Normal permissions授权问题

所谓normal permissions,是相对危险权限来说,所有normal permissions都不需要通过运行时授权,也就是说normal permissions在App安装时系统便给App授权,不需要用户授权。所以,normal permissions和M以前的版本一样,在manifest中声明即可拥有该权限。Android中normal permissions包括如下图2-图3:

图 2

图 3

3、不要压垮用户

不要压垮用户,其实就是App不应该在同一时间申请所有的权限,例如一个App需要20个权限,在打开App时全部请求用户授权,那么用户可能就把应用强退了。所以,运行时授权应该在需要时再请求。

4、用ADB调试新权限模型

4.1、adb install

用adb install新的-g参数,可以在安装应用时全部授权manifest中的权限。如adb install -g <path_to_apk>。

4.2、授权和撤销授权

用新的ADB package manager (pm)命令可以授权或撤销授权。如:授权:$ adb pm grant <package_name><permission_name>;撤销授权:$ adb pm revoke <package_name><permission_name>。

5、Intent代替授权

有时有两种方式去实现一个任务,例如,App需要通过camera获取一张图片,App可以请求camera权限去调用camera的API去拍摄一张图片。但是,App也可以通过发送包含action 为ACTION_IMAGE_CAPTURE的Intent,启动camera,让camera去拍摄图片,App只需要在onActivityResult()中获取返回来的图片。

用第一种方式,App开发者需要熟悉camera API,开发者需要开发拍摄的UI,需要请求权限,所以要求比第二种要高。所以,必要的时候,可以用Intent代替运行时授权去完成任务。

6、例子

请求权限:

图 4

处理结果:

图 5

Android M App Permissions相关推荐

  1. Android 音乐APP(一)扫描本地音乐

    效果图 音乐APP 扫描本地音乐 前言 正文 ① 新建项目 ② 第三方依赖 ③ 权限和基础配置 ④ 页面设计 ⑤ 权限请求 ⑥ 获取音乐数据 ⑦ 数据显示 结语 前言   这个项目纯粹的就是心血来潮, ...

  2. Android 天气APP(一)开发准备

    好天气APP(天气预报.空气质量.生活建议.灾害预警.出行建议.城市切换.城市搜索.世界国家/地区的城市.常用城市.背景更换.应用自动更新) (运用百度定位.百度地图与和风天气API制作) 演示视频地 ...

  3. Android音乐App桌面图标制作以及启动页面开发(简易音乐 一)

    Android音乐App桌面图标制作以及启动页面开发( 简易音乐 一 ) 关于 效果 第一步 第二步 第一步 修改SplashAcitivity的布局页面 第二步 修改androidmanifest. ...

  4. Android 天气APP(四)搭建MVP框架与使用

    上一篇:Android 天气APP(三)访问天气API与数据请求 MVP/MVVM框架搭建与使用 新版------------------- 一.创建依赖模块 二.模块初始化 三.搭建网络框架 四.基 ...

  5. Android 天气APP(二)获取定位信息

    上一篇:Android 天气APP(一)开发准备 编码阶段 新版------------------- 一.使用ViewBinding 二.初始化SDK 三.初始化定位 四.检查和请求权限 五.文章源 ...

  6. Android音乐App开发准备( 简易音乐 二 )

    Android音乐App开发准备( 简易音乐 二 ) 关于 效果: 编写Activity基类-BaseActivity 修改启动页 复用的标题栏 关于   第一篇看Android音乐App开发准备( ...

  7. android 程序 读logo,Android端APP更换logo和名称后都需要些测试哪些内容呢?

    原标题:Android端APP更换logo和名称后都需要些测试哪些内容呢? 之前有人在搜狗测试粉丝群中问过APP更换logo和名称后需要怎么测试呢?小编正好经历过这样的需求,下面来系统整理一下APP更 ...

  8. 格式android id,android 获取APP的唯一标识applicationId的实例

    使用getIdentifier()方法可以方便的获各应用包下的指定资源ID. 方式一 int indentify = getResources().getIdentifier("com.te ...

  9. Tensorflow Lite Android Demo App

    Tensorflow Lite Android Demo App 本文仅演示如何打通Tensorflow Lite官方demo.  Building in Android Studio using T ...

最新文章

  1. centos 安装指定版本gc_CentOS 环境安装所需命令
  2. spring MVC cors跨域实现源码解析
  3. python画柱形图-Python数据分析:柱形图的绘制方法
  4. php mysql 子查询_php – MySQL查询和子查询
  5. 扩展 KMP(模板) 洛谷P5410
  6. c语言实现链表结构6,用c语言实现的链表结构--数据结构实验
  7. pmos导通条件 图示_如何判断NMOS管和PMOS管
  8. 小米集团架构调整:王川出任CSO 李肖爽兼任大家电部总经理
  9. 数值变量分类问题相关原理知识
  10. 生产管理MES系统框架
  11. VINS_Fusion学习01——官方教程翻译解读
  12. Linux 编译debug内核
  13. 计算机不能报名系统软件,电脑无法安装税控系统、国税申报软件,怎么回事
  14. Aristocracy, Democracy, and System Design 读书笔记
  15. 国内网通、电信代理服务器地址
  16. php强类型作用,强类型php性能很彪悍
  17. disallow api.php,爬虫之robots.txt
  18. react-native-beacons-manager扫描beacons为空数组(android)--工作笔记
  19. win7 修复计算机 黑屏,拯救黑屏 Win7系统引导文件丢失修复教程
  20. 物联网开发笔记(52)- 使用Micropython开发ESP32开发板之W5500以太网网络模块有线网络通信

热门文章

  1. 读者投稿:阿里 P6 面试体验
  2. python实现数的逆序_python怎么逆序
  3. B-S架构和C-S架构区别
  4. ChunJunOceanBase联合方案首次发布:构建一体化数据集成方案
  5. 定理(Theorem)、引理(Lemma)、推论(Corollary)的定义及LaTeX用法
  6. 8种zk-SNARK构建的比较
  7. 量化思维与常见的量化标
  8. 志在必得的。。。。失败。。。
  9. Mac更新git用户名和密码
  10. 总结Python设置Excel单元格样式的一切,比官方文档还详细。