首页 > 解决方案 > 在哪里可以找到有关 android 特定权限的更多信息

问题描述

我需要从 minSdkVersion="19" 升级旧的 android 应用程序,所以我需要处理所有权限。

在清单中,它需要一些危险的权限。例如:

<uses-permission android:name="android.permission.BLUETOOTH" /> <!-- normal -->
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <!-- normal -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <!-- normal -->

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- dangerous -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <!-- ??? -->
<uses-permission android:name="android.permission.WAKE_LOCK" /> <!-- normal -->
<uses-permission android:name="android.permission.INTERNET" /> <!-- normal -->
<uses-permission android:name="android.permission.VIBRATE" /> <!-- normal -->
<uses-permission android:name="android.permission.CAMERA" /> <!-- dangerous -->

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- dangerous -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- dangerous -->

<android:uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- dangerous -->
<android:uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"  android:maxSdkVersion="18" /> <!-- dangerous -->
  1. 如何在代码中找到需要这些危险权限的地方?是否有依赖于每个权限的功能列表?

  2. 关于MOUNT_UNMOUNT_FILESYSTEMS- 我在哪里可以找到它是危险的还是正常的?

标签: androidandroid-permissions

解决方案


在回答具体问题之前,让我说,如果您的应用程序是由普通用户使用(即从 Google Play 或其他商店下载)列出这么多权限可能会吓跑用户。从这个问题听起来你继承了别人的代码,甚至不需要其中一些权限。

这里要注意的另一件重要事情是 3rd 方应用程序(例如,您从 Google 的 Play 商店下载的应用程序)和手机制造商应用程序(您购买手机时安装的大多数应用程序)之间的区别。

制造商应用程序可以使用第三方无法使用的权限。

对于你的问题:

  1. 我不记得每个功能都需要权限的完整列表。也许其他人可以在这里启发我们俩:) 针对 Android M 及更高版本的代码应该通过检查是否授予权限来包装任何“危险”行为,使用类似ContextCompat.checkSelfPermission(Context, String)的函数以避免 runtime SecurityExceptions。但在旧代码中发现“危险”行为几乎是不可能的,主要是因为 Android OS 与开发人员的协议是“你只需在清单中请求这些权限,我会确保不会引发运行时安全异常”。恐怕这里需要手动搜索。

  2. 这是来自 Android 官方文档的所有可用权限的完整列表 -

https://developer.android.com/reference/android/Manifest.permission

请注意,第 3 方应用程序会忽略 MOUNT_UNMOUNT_FILESYSTEM 权限,因此(除非您为三星或小米等公司工作)您可以安全地从清单中删除此权限。

  1. 另请注意,如果您请求 FINE_LOCATION 权限,则无需请求 COARSE_LOCATION 权限。

推荐阅读