文档章节

你的Android应用完全不需要那么多的权限

拉偶有所依
 拉偶有所依
发布于 2015/03/05 10:41
字数 1383
阅读 252
收藏 6

Android系统的权限从用户的角度来看有时候的确有点让人摸不着头脑。有时候可能你只需要做一些简单的事情(对联系人的信息进行编辑),却申请了远超你应用所需的权限(比如访问所有联系人信息的权限)。

这很难不让用户对你保存戒备。如果你的应用还是闭源的那用户也没办法验证是否你的应用正在把他的联系人信息上传到应用服务器上面去。即使你向用户解释你为什么申请这个权限,他们最后也可能不会相信你。所以我在过去开发Android应用的时候避免去用一些奇技淫巧,因为这会额外去申请权限,用户也会对你不信任。

经过一段时间实践后,我有这样一个体会:你在完成某些操作的时候并不一定需要申请权限的。

比如Android系统中有这样一个权限: android.permission.CALL_PHONE. 你需要这个权限来让你从你的应用中调用拨号器,对吗?下面的代码就是你如果拨打电话的,对吧?

<span style="font-size:14px;">Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("1234567890"))
startActivity(intent);</span>

错!这个权限可以让你的手机在没有用户操作的情况下打电话!也就是说如果我的应用用了这个权限,我可以在你不知情的情况下每天凌晨三点去拨打骚扰电话。

其实正确的做法是这样的——使用 ACTION_VIEW 或者 ACTION_DIAL:

<span style="font-size:14px;">Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("1234567890"))
startActivity(intent);</span>

这个方案的动人之处在于你的应用就不用申请权限啦。 为什么不需要权限呢?因为你使用的这个 Intent 会启动拨号器,并将你设置好的号码预先拨号。比起之前的方案,现在还需要用户点击“拨号”来打电话,没有用户的参与,这个电话就打不出了。说实话,这让我感觉很好,现在很多应用申请的权限让人有点不知所措。

另外一个例子:我为我的妻子写了一个叫做 Quick Map 应用,这个应用主要是为了解决她对现有的导航应用的吐槽。她只想要一个联系人列表和一条导航到这些联系人所在地的路径。

看到这里你可能觉得我需要申请访问所有联系人信息的申请来完成这个应用:哈哈哈,你又错了!如果你看了我的源码,你就知道其实我用了 ACTION_PICK这个Intent 启动相关应用来获取联系人地址的:

<span style="font-size:14px;">Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(StructuredPostal.CONTENT_TYPE);
startActivityForResult(intent, 1);</span>

这意味着我的应用不但不需要申请权限,而且还不要额外的UI。这让应用的用户体验也提升了不少。

在我看来,Android系统最酷的部分之一就是 它的 Intent 系统。因为Intent 意味着我不需要任何东西都要自己来实现。每个应用都会在Android注册它所擅长处理的数据领域,比如电话号码,短信或者联系人信息。如果什么事情都要一个应用来解决,那么这个应用会变得十分臃肿。

Android系统另外一个优点就是我可以利用其它应用所申请的权限,这样我的应用就不需要再次申请了。Android系统中的以上两点可以让你的应用变得更加简单。拨号器需要权限来拨打电话,但是我只需要一个拨打电话的intent就行了,不需要权限。因为用户信任Android自带的拨号器,但不信任我的应用,这很好啊。

我写这篇博客的意义在于在你申请权限之前,你应该至少好好读读关于Intent的官方文档,看看是否可以通过其他应用来完成你的操作。如果你想更深入的了解,你可以研究一下这篇关于权限的官方文档,里面介绍更多更精细的权限。如果想要获得更好的用户体验,有一点也是非常必要的,那就是应用的安全性,关于这一点可以去看看专业的应用安全服务商爱加密的应用安全解决方案

总之,使用更少的权限不但可以让你获取更多的用户信任,对用户来说,也让他们获得了很好的用户体验。


© 著作权归作者所有

共有 人打赏支持
拉偶有所依
粉丝 28
博文 81
码字总数 138944
作品 0
长沙
私信 提问
加载中

评论(1)

黑色海鸥
79
翻译:你的Android应用完全不需要那么多的权限

Android系统的权限从用户的角度来看有时候的确有点让人摸不着头脑。有时候可能你只需要做一些简单的事情(对联系人的信息进行编辑),却申请了远超你应用所需的权限(比如访问所有联系人信息...

拉偶有所依
2015/03/05
133
0
AndroidManifest.xml文件详解(activity-alias)

语法(SYNTAX): . . . 被包含于(CONTAINED IN): 能够包含的元素(CAN CONTAIN): 说明(DESCRIPTION): 这个元素用于给targetActivity属性所指定Activity设定一个别名,目标Activity必...

长平狐
2012/10/16
464
0
Enhanced Security Solution in Android

1 背景知识:Android/BMP/J2ME中应用的权限和签名 1.1 J2ME中的签名和权限 J2ME的应用默认需要签名,是否签名以及使用什么证书签名的目的并非限制仅特定应用运行,而是获知应用的开发商以及对...

eastwake
2013/03/16
0
0
Android网络防火墙实现初探

智能手机网络防火墙的现状 随着智能手机越来越普及,以及3G网络的快速发展,越来越多的用户使用手机上网冲浪。于此同时,各类恶意软件也通过网络来盗取用户手机上的的隐私,甚至控制用户的手...

小克898
2013/07/19
0
3
Android自定义权限使用总结

最近在研究关于android自定义权限的问题,关于自定义权限一般是保证APP的安全性,那么什么事自定义权限?今天我们来补充一下自己的知识 作者:BrightVan 地址:www.jianshu.com/p/b60cde583...

codeGoogle
2018/08/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

PHP接收前端传值各种情况整理

PHP接收前端传值各种情况整理 服务端代码: header('Access-Control-Allow-Origin:*');var_dump($_POST);exit; 情况 1) 传null $.post('http://xxxxx.xx/index.php', { "test": null}......

SSSWIIILLL
36分钟前
2
0
利用神器BTrace 追踪线上 Spring Boot应用运行时信息

概述 生产环境中的服务可能会出现各种问题,但总不能让服务下线来专门排查错误,这时候最好有一些手段来获取程序运行时信息,比如 接口方法参数/返回值、外部调用情况 以及 函数执行时间等信...

CodeSheep
今天
18
0
OSChina 周四乱弹 —— 我想过年请假提前回家两天

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @clouddyy :#每日一歌# 分享王力宏的单曲《爱错》 《爱错》- 王力宏 手机党少年们想听歌,请使劲儿戳(这里) @Caremorele :这几天起床有点...

小小编辑
今天
566
9
Cookie 显示用户上次访问的时间

import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.serv......

gwl_
今天
1
0
网络编程

第14天 网络编程 今日内容介绍  网络通信协议  UDP通信  TCP通信 今日学习目标  能够辨别UDP和TCP协议特点  能够说出UDP协议下两个常用类名称  能够说出TCP协议下两个常用类名称...

stars永恒
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部