android - 在哪里可以找到有关 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 -->
如何在代码中找到需要这些危险权限的地方?是否有依赖于每个权限的功能列表?
关于
MOUNT_UNMOUNT_FILESYSTEMS
- 我在哪里可以找到它是危险的还是正常的?
解决方案
在回答具体问题之前,让我说,如果您的应用程序是由普通用户使用(即从 Google Play 或其他商店下载)列出这么多权限可能会吓跑用户。从这个问题听起来你继承了别人的代码,甚至不需要其中一些权限。
这里要注意的另一件重要事情是 3rd 方应用程序(例如,您从 Google 的 Play 商店下载的应用程序)和手机制造商应用程序(您购买手机时安装的大多数应用程序)之间的区别。
制造商应用程序可以使用第三方无法使用的权限。
对于你的问题:
我不记得每个功能都需要权限的完整列表。也许其他人可以在这里启发我们俩:) 针对 Android M 及更高版本的代码应该通过检查是否授予权限来包装任何“危险”行为,使用类似
ContextCompat.checkSelfPermission(Context, String)
的函数以避免 runtimeSecurityException
s。但在旧代码中发现“危险”行为几乎是不可能的,主要是因为 Android OS 与开发人员的协议是“你只需在清单中请求这些权限,我会确保不会引发运行时安全异常”。恐怕这里需要手动搜索。这是来自 Android 官方文档的所有可用权限的完整列表 -
https://developer.android.com/reference/android/Manifest.permission
请注意,第 3 方应用程序会忽略 MOUNT_UNMOUNT_FILESYSTEM 权限,因此(除非您为三星或小米等公司工作)您可以安全地从清单中删除此权限。
- 另请注意,如果您请求 FINE_LOCATION 权限,则无需请求 COARSE_LOCATION 权限。
推荐阅读
- python-3.x - Numpy 不会将临时变量添加到向量的某些元素
- java - @Notblank 注释不显示消息
- reactjs - Mobx React 与 Material Grid
- ios - Xcode 11.3 中的“无法为未定义的类定义类别”错误,无法访问源文件
- php - 在幂等情况下通过服务更新实体的最佳方式?
- php - PHP 使用字符串创建具有命名空间的类
- python - Django 3.0.4 兼容六包
- azure - 按部署名称或标签选择器过滤 Kubernetes 事件
- swift - 如何在 swift ui 中显示两个警报,一个接着一个
- node.js - 在 AWS EC2 上反应前端?