当前位置: 首页 > 科技观察

您的Android应用程序根本不需要那么多权限

时间:2023-03-16 18:03:06 科技观察

Android系统权限有时从用户的角度来看有点混乱。有时您可能只需要做一些简单的事情(编辑联系人信息),但您申请的权限远远超出您的应用程序所需的权限(例如访问所有联系人信息)。很难不让用户对你保持警惕。如果你的应用还是闭源的,用户就没有办法验证你的应用是否在上传他的联系方式到应用服务器。即使您向用户解释您请求此权限的原因,他们也可能不会相信您。所以我以前在开发Android应用的时候,都是避免使用一些技巧和技巧的,因为这样会需要额外的权限,用户不会信任你。经过一段时间的实践,我有这样的体会:完成某些操作不一定需要申请权限。比如Android系统中有这么一个权限:android.permission.CALL_PHONE。您需要此权限才能让您从应用程序调用拨号器,对吗?如果你打电话,下面的代码是你会做什么,对吧?Intentintent=newIntent(Intent.ACTION_CALL);intent.setData(Uri.parse("1234567890"))startActivity(intent);错误的!此权限允许您的手机无需用户操作即可拨打电话!也就是说,如果我的app使用了这个权限,我就可以在你不知情的情况下每天凌晨3点打骚扰电话。其实正确的做法是使用ACTION_VIEW或者ACTION_DIAL:Intentintent=newIntent(Intent.ACTION_DIAL);intent.setData(Uri.parse("1234567890"))startActivity(intent);应用不需要申请权限。为什么不需要权限?因为您使用的Intent将启动拨号程序并预拨您设置的号码。与之前的方案相比,用户仍然需要点击“拨号”才能拨打电话。没有用户的参与,呼叫是无法进行的。老实说,这让我感觉很好,如今许多应用程序要求的权限有点让人不知所措。再举个例子:我给老婆写了一个叫快捷地图的应用,主要是为了解决她对现有导航应用的抱怨。她想要的只是一个联系人列表和一个导航到这些联系人所在位置的路径。看到这里,你可能会认为我需要申请一个访问所有联系方式的申请才能完成这个申请:哈哈哈,你又错了!如果你看过我的源码就会知道,我其实是使用了IntentACTION_PICK来启动相关应用获取联系地址:Intentintent=newIntent(Intent.ACTION_PICK);intent.setType(StructuredPostal.CONTENT_TYPE);startActivityForResult(intent,1);这意味着我的应用不仅不需要申请权限,也不需要额外的UI。这大大改善了应用程序的用户体验。在我看来,Android系统最酷的部分之一就是它的Intent系统。因为Intent意味着我不需要自己实现任何东西。每个应用程序都会向Android注册它擅长处理的数据字段,例如电话号码、短信或联系信息。如果一切都需要一个应用来解决,那么这个应用就会变得非常臃肿。Android系统还有一个好处就是我可以使用其他应用申请的权限,这样我的应用就不需要再申请了。Android系统中的以上两点可以让你的应用更加简单。拨号器需要权限才能拨打电话,但我只需要一个意图就可以拨打电话,不需要任何权限。因为用户信任Android的原生拨号器,而不是我的应用程序,这很好。写这篇博??客的原因是,在申请权限之前,你至少应该阅读一下官方关于Intent的文档,看看你是否可以通过其他应用程序完成你的操作。如果想更深入的了解,可以研究一下官方这篇关于权限的文档,里面介绍了更细粒度的权限。总之,使用更少的权限不仅能让你获得更多的用户信任,还能给用户带来良好的用户体验。来源:DanLew我不需要你的许可!