程序员人生 网站导航

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

栏目:综合技术时间:2015-09-06 08:37:15

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

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

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

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

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

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

其实正确的做法是这样的――使用 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 会启动拨号器,并将你设置好的号码预先拨号。比起之前的方案,现在还需要用户点击“拨号”来打电话,没有用户的参与,这个电话就打不出了。说实话,这让我感觉很好,现在很多利用申请的权限让人有点手足无措。

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

看到这里你可能觉得我需要申请访问所有联系人信息的申请来完成这个利用:哈哈哈,你又错了!如果你看了我的源码,你就知道其实我用了 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系统最酷的部份之1就是 它的 Intent 系统。由于Intent 意味着我不需要任何东西都要自己来实现。每一个利用都会在Android注册它所善于处理的数据领域,比如电话号码,短信或联系人信息。如果甚么事情都要1个利用来解决,那末这个利用会变得10分臃肿。

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

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

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

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐