Permissions Best Practices

在安装的过程中,用户非常easy忽略权限请求。

假设一个用户相应用感觉沮丧或者操心泄漏个人信息,那么这些用户就会不用他或者卸载它。

怎样规避这个问题呢?

Consider Using an Intent

在非常多的案例中,你可能会在两种实现方式中做出选择,你能够是的你的app拥有一个权限。也能够通过Intent的方式让还有一个app帮你实现相关功能。

比如。一款应用须要通过照相机获取图片,你能够通过请求CAMERA权限,该权限能够使得你的app能够直接控制相机。

你的应用能够用camera的api控制相机和获取图片。这样的方式能够使你的应用全然的控制拍照过程中,并同意相机界面融合到应用中。

然而,假设你不须要所有的控制权,你能够使用Intent 的ACTION_IMAGE_CAPTURE请求图片。

当你发送这个Intent,系统就会提供几个相机的app可选项(前提是没有设置默认使用的应用) ,用户能够选择一个相机应用。然后通过onActivityResult()方法获得返回值。

同理,假设你须要拨打一个电话,使用用户的联系人列表等等,你能够创建一个Intent,或者直接向用户请求权限。

每一种方式都有利有弊。

假设你申请一个户权限:

当你进行一个操作的时候,你的app控制了用户的体验。

然而过多的控制,会添加应用的复杂度。由于你须要设计适当的UI。

在执行时(API>=23)或者安装时,用户被提示授予权限许可。在这之后。你的应用在进行时时无需和用户进行额外的交互。然而,假设用户没有授予权限或者撤销了,你的应用将无法正常执行。

假设使用intent 的方式:

你不须要为了执行设计UI。处理该Intent的应用将提供UI。

然而,因为打开的是另外的应用,这也就意味着,你不能控制用户的交互体验了。在你通过intent启动的app中。因为不是你自己设计的界面。所以用户的交互是不受你控制的。

假设你通过intent启动的这个应用。用户没有一个默认的应用,系统就会弹出一个窗体。让用户选择一个app。

假设用户没有设置一个默认启动的,每次进行该操作的时候,都会弹出一个选择窗体。

Only Ask for Permissions You Need

每一次的权限请求,都是强迫用户去做出一个选择。

你应该最少的向用户去请求权限。

假设用户的版本号大于等于Android6.0,每当用户尝试使用一些须要权限的新特性的时候,你的应用都会弹出一个请求权限的窗体。假设是在早前的版本号中,权限列表是在安装的时候提示给用户的。假设权限列表太长或者看起来不舒服,用户可能不去安装这个应用。为了处理这些问题。你应该最少程度的请求权限。

你能够用intent的方式取代。假设你的新特性须要一个权限。你能够让还有一个app帮你实现这个功能。

Don't Overwhelm the User

假设用户的系统是大于等于Android6.0,用户必须在程序执行时去授予权限。

假设你一次性让面对用户非常多的权限请求,你可能使你的用户收到打击,退出你的应用。

相反的,你应该在什么时候使用,什么时候想用户请求。

在应用中,一个或多个权限往往是必要的。这样的情况。一启动app,我们就要想用户请求。比如。你做了一个摄影的应用。

这个应用须要用户的Camera权限。

当用户第一次启动应用。他们不会对你的权限请求感到困惑。可是假设这款应用有一个特色的红能,向你的通讯录好友风向图片,你不能上来就去请求用户的R  EAD_CONTACT权限。你应该在分享的时候去向用户请求权限。

假设你的应用提供了向导。最好是在向导结束之后在向用户请求权限。

Explain Why You Need Permissions

当你调用requestPermission()方法的时候,系统就会弹出弹出权限申请弹窗,可是这里没有表述你为什么须要这个权限。在非常多案例中。用户会感到困惑。一个比較不错的注意是在调用requestPermission()之前,向用户解释你为什么须要这个权限。

比如:一个摄影app,想要用定位服务在图片上打上标志。一个普通的用户可能不明确为什么一个图片须要使用定位,会感到非常困惑。

在这个案例中。一个好主意是在requestPermission()之前向用户解释。

还有一种方式,你能够把权限请求融合在向导中。在向导中。你能够向用户展示app的特殊功能点,而且向用户展示你为什么须要这个权限。比方。这个摄影的app,就能够在向导中表明”向联系人分享照片“这个特色功能。然后告诉你用户你须要联系人列表这个权限。

然后向用户申请。

这个应用能够能过通过调用requestPermission()方法,向用户请求权限。

当然,不是每个用户都会看完你的向导。所以你还是要在用户使用该功能的时候,检測用户是否授权。假设没有。还要弹窗向用户申请该权限。

Test for Both Permissions Models

在Android6.0中,通过在执行时请求权限取代了安装时。由于这个原因,你必须在更广泛的条件下測试你的应用。

在Android6.0之前我们有充足的理由相信,我们的程序执行了,就有了足够的权限,由于这些权限已经在manifest文件里声明。

在新的权限模型中,就不能够这样了。

在大于等于API23的情况下,你须要确定你的权限:

·        IDentify your app’s current permissions andthe related code paths.

·        Test user flows across permission-protectedservices and data.

·        Test with various combinations of grantedor revoked permissions. For example, a camera app might listCAMERAREAD_CONTACTS,
and ACCESS_FINE_LOCATION in itsmanifest. You should test the app with each of
these permissions turned on andoff, to make sure the app can handle all permission configurations gracefully.

·        Use the adb toolto manage permissions from the command line:

o    Listpermissions and status by group:

$ adb shell pm list permissions -d -g

o    Grantor revoke one or more permissions:

$ adb shell pm [grant|revoke] <permission-name> ...

·        Analyze your app for services that usepermissions.

假设您认为我的分享对您实用,微信扫一扫关注我吧。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

Android 6.0 开发人员对系统权限的使用与练习(Permissions Best Practices)的更多相关文章

  1. android 5.0开发环境搭建

    Android 5.0 是 Google 于 2014 年 10 月 15 日发布的全新 Android 操作系统.本文将就最新的Android 5.0 开发环境搭建做详细介绍. 工具/原料 jdk- ...

  2. Android 当打开“开发人员模式”中的“不保留活动”后,程序应当怎么保持正常执行

    Android 当打开"开发人员模式"中的"不保留活动"后,程序应当怎么保持正常执行咧. .? 在这几天,我一直在纠结这个问题.从发现,程序出现这个问题,是由于 ...

  3. Kotlin 编程语言成为其 Android 应用程序开发人员的首选语言

    今年 5 月,谷歌在 I/O 大会上宣布,Kotlin 编程语言成为其 Android 应用程序开发人员的首选语言. Kotlin 是一种面向现代多平台应用程序的编程语言,成为谷歌开发 Android ...

  4. 用SignalR 2.0开发客服系统[系列2:实现聊天室]

    前言 交流群:195866844 上周发表了 用SignalR 2.0开发客服系统[系列1:实现群发通讯] 这篇文章,得到了很多帮助和鼓励,小弟在此真心的感谢大家的支持.. 这周继续系列2,实现聊天室 ...

  5. 用SignalR 2.0开发客服系统[系列3:实现点对点通讯]

    前言 交流群:195866844 目录: 用SignalR 2.0开发客服系统[系列1:实现群发通讯] 用SignalR 2.0开发客服系统[系列2:实现聊天室] 真的很感谢大家的支持,今天发表系列3 ...

  6. 用SignalR 2.0开发客服系统[系列4:负载均衡的情况下使用SignalR]

    前言 交流群:195866844 目录: 用SignalR 2.0开发客服系统[系列1:实现群发通讯] 用SignalR 2.0开发客服系统[系列2:实现聊天室] 用SignalR 2.0开发客服系统 ...

  7. 用SignalR 2.0开发客服系统[系列5:使用SignalR的中文简体语言包和其他技术点]

    前言 交流群:195866844 目录: 用SignalR 2.0开发客服系统[系列1:实现群发通讯] 用SignalR 2.0开发客服系统[系列2:实现聊天室] 用SignalR 2.0开发客服系统 ...

  8. 提供给Android和iOS开发人员的UWP移植向导

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:前几天微软发布了一个针对Android和iOS开发人员理解Windows Apps概念 ...

  9. Android开发-API指南-系统权限

    System Permissions 英文原文:http://developer.android.com/guide/topics/security/permissions.html 采集日期:201 ...

随机推荐

  1. Spring Batch(4): Job详解

    Spring Batch(4): Job详解 2016-03-26 18:46 870人阅读 评论(1) 收藏 举报  分类: Spring(6)  版权声明:本文为博主原创文章,未经博主允许不得转载 ...

  2. ES JVM使用如果超过75%就会GC较多,导致ES索引性能下降

    转自:https://www.elastic.co/guide/en/cloud/current/ec-metrics-memory-pressure.html Scenario: How Does ...

  3. DB-MySQL:MySQL 复制表

    ylbtech-DB-MySQL:MySQL  复制表 1.返回顶部 1. MySQL 复制表 如果我们需要完全的复制MySQL的数据表,包括表的结构,索引,默认值等. 如果仅仅使用CREATE TA ...

  4. php global GLOBALS[]变量

    $a=123; function aa() { Global $a; //如果不把$a定义为global变量,函数体内是不能访问函数体外部的$a的,但是可以定义一个相同的名字$a,此时这个变量是局部变 ...

  5. Hua Wei 机试题目三---2014

    一.根据对应规则进行翻译输出 描述:已知有如下的对应规则: ,则输入任意个正整数,输出经过规则翻译以后对应的结果. 例如:输入:1234:输出bcde. 题目很简单,我觉得需要注意的问题就是对于大整数 ...

  6. JavaScript DOM编程艺术(第2版)学习笔记2(4~6章应用实例)

    本书的第4章使用第3章学到的操作DOM的方法和属性写了一个展示图片的网页,并在第5,6章对代码进行了优化. 第一版,搭建网页的静态结构,包括一级标题<h1>,无序列表清单<ul> ...

  7. Java NIO(二)缓冲区

    概念 缓冲区:一个用于特定基本数据类型的容器,由java.nio包定义的所有缓冲区都是Buffer抽象类的子类.其作用于与NIO的通道进行交互,数据从通道读入缓冲区,数据从缓冲区写入通道 Buffer ...

  8. ZBrush中标准笔刷介绍

    ZBrush最实用.精彩的部分便是雕刻了,笔刷又有时雕刻时必不可少的工具,ZBrush中给我们提供了很多种笔刷,那么,最基础.最常用的笔刷是什么呢,本文内容向大家介绍ZBrush®中标准笔刷以便大家熟 ...

  9. 脚本_使用expect自动交互远程主机安装软件

    #!bin/bash#功能:使用expect工具自动交互密码,远程到其它主机,安装httpd软件#作者:liusingbon#删除~/.ssh/known-hosts后,ssh远程任何主机,系统都会询 ...

  10. day13 基本的文件操作(好东西)

    目录 基本的文件处理 什么是文件 如何使用文件 使用Python写一个小程序控制文件 open(打开文件) read: readline:一次性读取一行 del:删除 close:关闭 write(写 ...