当前位置:   article > 正文

常用权限汇总_uses-permission-sdk-23

uses-permission-sdk-23

常用权限汇总

官网权限教程:https://developer.android.com/guide/topics/permissions/overview
所有权限可查看:https://developer.android.com/reference/android/Manifest.permission
权限示例Demo:https://github.com/android/permissions-sampleshttps://developer.android.com/codelabs/android-privacy-codelab#0 此Demo是通过申请摄像头权限,然后打开一个摄像头预览界面。这个关于摄像头的代码也非常值得学习。

  • ACCESS_BACKGROUND_LOCATION 允许应用程序在后台访问位置信息。如果您请求此权限,则还必须请求ACCESS_COARSE_LOCATIONACCESS_FINE_LOCATION。单独请求此权限不会为您提供位置访问权限。
  • ACCESS_COARSE_LOCATION 允许应用访问大概位置。或者,您可能想要ACCESS_FINE_LOCATION
  • ACCESS_FINE_LOCATION 允许应用访问精确位置。或者,您可能想要ACCESS_COARSE_LOCATION
  • ACCESS_LOCATION_EXTRA_COMMANDS 允许应用程序访问额外的位置提供程序命令。
  • ACCESS_MEDIA_LOCATION 允许应用程序访问保存在用户共享集合中的任何地理位置。
  • ACCESS_NETWORK_STATE 允许应用程序访问有关网络的信息。
  • ACCESS_WIFI_STATE 允许应用程序访问有关 Wi-Fi 网络的信息。
  • ANSWER_PHONE_CALLS 允许该应用接听来电。
  • BLUETOOTH 允许应用程序连接到配对的蓝牙设备(蓝牙开、关、扫描、配对所需要的权限)。在API 级别 1 中添加。
  • BLUETOOTH_ADMIN 允许应用程序发现和配对蓝牙设备。在API 级别 1 中添加。
  • BLUETOOTH_SCAN 需要能够发现和配对附近的蓝牙设备。在API 级别 31 中添加。
  • BLUETOOTH_CONNECT 需要能够连接到配对的蓝牙设备。在API 级别 31 中添加。
  • BLUETOOTH_ADVERTISE 需要能够向附近的蓝牙设备做广告。在API 级别 31 中添加。
  • BLUETOOTH_PRIVILEGED 允许应用程序在没有用户交互的情况下配对蓝牙设备(配对蓝牙时避免弹出配对对话框所需要的权限),并允许或禁止访问电话簿或消息访问。不供第三方应用程序使用。
  • BROADCAST_STICKY 允许应用程序广播粘性意图。这些广播的数据在完成后由系统保留,以便客户端可以快速检索该数据而无需等待下一次广播。
  • CALL_PHONE 允许应用程序发起电话呼叫,而无需通过 Dialer 用户界面让用户确认呼叫。
  • CAMERA 需要能够访问相机设备。
  • CHANGE_NETWORK_STATE 允许应用程序更改网络连接状态。
  • CHANGE_WIFI_STATE 允许应用程序更改 Wi-Fi 连接状态。
  • CLEAR_APP_CACHE 允许应用程序清除设备上所有已安装应用程序的缓存。保护级别:签名|特权
  • DISABLE_KEYGUARD 允许应用程序在不安全时禁用 Keyguard(手机的锁屏模块,译为键盘守卫, 用于保护手机, 包含解锁(指纹、图案、PIN等)、锁屏通知显示、快速启动相机、快速拨号、显示日期/时间等)。
  • DUMP 允许应用程序从系统服务中检索状态转储信息。不供第三方应用程序使用。
  • EXPAND_STATUS_BAR 允许应用程序展开或折叠状态栏。
  • FOREGROUND_SERVICE 允许常规应用程序使用Service.startForeground。如果应用面向 Android 9(API 级别 28)或更高版本并使用前台服务,则其必须请求 FOREGROUND_SERVICE 权限。这是一种普通权限
  • FOREGROUND_SERVICE_CAMERA 允许常规应用程序使用“camera”类型调用Service.startForeground
  • FOREGROUND_SERVICE_CONNECTED_DEVICE 允许常规应用程序使用“connectedDevice”类型调用Service.startForeground
  • FOREGROUND_SERVICE_DATA_SYNC 允许常规应用程序使用“dataSync”类型调用Service.startForeground
  • FOREGROUND_SERVICE_FILE_MANAGEMENT 允许常规应用程序使用“fileManagement”类型调用Service.startForeground
  • FOREGROUND_SERVICE_HEALTH 允许常规应用程序使用“health”类型调用Service.startForeground
  • FOREGROUND_SERVICE_LOCATION 允许常规应用程序使用“location”类型调用Service.startForeground
  • FOREGROUND_SERVICE_MEDIA_PLAYBACK 允许常规应用程序使用“mediaPlayback”类型调用Service.startForeground
  • FOREGROUND_SERVICE_MEDIA_PROJECTION 允许常规应用程序使用“mediaProjection”类型调用Service.startForeground
  • FOREGROUND_SERVICE_MICROPHONE 允许常规应用程序使用“microphone”类型调用Service.startForeground
  • FOREGROUND_SERVICE_PHONE_CALL 允许常规应用程序使用“phoneCall”类型调用Service.startForeground
  • FOREGROUND_SERVICE_REMOTE_MESSAGING 允许常规应用程序使用“remoteMessaging”类型调用Service.startForeground
  • GET_ACCOUNTS 允许访问帐户服务中的帐户列表。
  • GET_PACKAGE_SIZE 允许应用程序找出任何包使用的空间。
  • GET_TASKS 此常量在 API 级别 21 中已弃用。不再强制执行。
  • INSTALL_SHORTCUT 允许应用程序在启动器中安装快捷方式。在 Android O(API 级别 26)及更高版本中,INSTALL_SHORTCUT广播不再对您的应用产生任何影响,因为它是私有的隐式广播。相反,您应该使用 类requestPinShortcut() 中的方法创建一个应用程序快捷方式ShortcutManager。
  • INSTANT_APP_FOREGROUND_SERVICE 允许免安装应用创建前台服务。保护等级:签名|开发|即时|app
  • INTERNET 允许应用程序打开网络套接字。
  • KILL_BACKGROUND_PROCESSES 允许应用程序调用 ActivityManager.killBackgroundProcesses(String)。从 Android 版本Build.VERSION_CODES.UPSIDE_DOWN_CAKE开始,ActivityManager.killBackgroundProcesses(String)对第三方应用程序不再可用。为了向后兼容,调用此API时如果是杀死自己则可以。如果调用者有KILL_ALL_BACKGROUND_PROCESSES系统权限,则其他进程也会被杀死。
  • MANAGE_EXTERNAL_STORAGE 允许应用程序广泛访问范围存储中的外部存储。旨在供少数需要代表用户管理文件的应用程序使用。
  • MANAGE_MEDIA 允许应用程序在未经用户确认的情况下修改和删除此设备或任何连接的存储设备上的媒体文件。
  • MODIFY_AUDIO_SETTINGS 允许应用程序修改全局音频设置。比如:设置扬声器的开或关。
  • MODIFY_PHONE_STATE 允许修改电话状态 - 开机、mmi、网络首选项等。不包括拨打电话。不供第三方应用程序使用。
  • NFC 允许应用程序通过 NFC 执行 I/O 操作。
  • PACKAGE_USAGE_STATS 允许应用程序收集组件使用统计信息。声明权限意味着使用 API 的意图,并且设备的用户可以通过“设置”应用程序授予权限。
  • POST_NOTIFICATIONS 允许应用发布通知。防护等级:危险
  • PROCESS_OUTGOING_CALLS 允许应用程序在拨出呼叫期间查看正在拨打的号码,并可选择将呼叫重定向到不同的号码或完全中止呼叫。API 29 中已弃用。
  • QUERY_ALL_PACKAGES 允许查询设备上的任何普通应用程序,无论清单声明如何。在API 级别 30 中添加。查询已安装的应用时需要此权限,在Android 11 或更高版本的设备上以 Android API 级别 30 或更高版本为目标时,该QUERY_ALL_PACKAGES权限才会生效。使用此权限后,无需在清单文件中使用queries元素来声明包名可见性。
  • READ_CALENDAR 允许应用程序读取用户的日历数据。
  • READ_CALL_LOG 允许应用程序读取用户的通话记录。注意:如果您的应用程序使用 READ_CONTACTS权限并且你的minSdkVersiontargetSdkVersion都设置为 15 或更低,系统将隐式授予您的应用程序此权限。如果您不需要此权限,请确保你的targetSdkVersion为16或更高。这是一个硬性限制权限,在记录的安装程序将权限列入白名单之前,应用程序无法持有该权限。有关详细信息,请参阅 PackageInstaller.SessionParams.setWhitelistedRestrictedPermissions(Set)。
  • READ_CONTACTS 允许应用程序读取用户的联系人数据。
  • READ_EXTERNAL_STORAGE 允许应用程序从外部存储读取。注意:从 API 级别 33 开始,此权限无效。如果您的应用程序访问其他应用程序的媒体文件,请改为请求这些权限中的一项或多项:READ_MEDIA_IMAGES、、 READ_MEDIA_VIDEO。 READ_MEDIA_AUDIO详细了解 与媒体文件关联的存储权限。这个权限里还有很多的描述,具体请查看API文档。
  • READ_LOGS 允许应用程序读取低级系统日志文件。不供第三方应用程序使用,因为日志条目可能包含用户的私人信息。
  • READ_MEDIA_AUDIO 允许应用程序从外部存储读取音频文件。在API 级别 33 中添加
  • READ_MEDIA_IMAGES 允许应用程序从外部存储读取图像文件。在API 级别 33 中添加
  • READ_MEDIA_VIDEO 允许应用程序从外部存储读取视频文件。
  • READ_PHONE_NUMBERS 允许读取设备的电话号码。这是由READ_PHONE_STATE授权的一个子集,但但是暴露于即时的应用程序。在API 级别 26 中添加
  • READ_PHONE_STATE 允许以只读方式访问手机状态(比如:设备的IMEI),包括当前的蜂窝网络信息、任何正在进行的通话的状态以及设备上注册的任何PhoneAccount的列表。
  • READ_PRECISE_PHONE_STATE 允许只读访问精确的电话状态。允许读取有关特殊用途应用程序(例如拨号器、运营商应用程序或 ims 应用程序)的电话状态的详细信息。
  • READ_SMS 允许应用程序读取 SMS 消息。这是一个硬性限制权限,在记录的安装程序将权限列入白名单之前,应用程序无法持有该权限。有关详细信息,请参阅 PackageInstaller.SessionParams.setWhitelistedRestrictedPermissions(Set)。
  • REBOOT 需要能够重新启动设备。不供第三方应用程序使用。
  • RECEIVE_BOOT_COMPLETED 允许应用程序在系统完成启动后接收Intent.ACTION_BOOT_COMPLETED广播
  • RECEIVE_MMS 允许应用程序监控传入的彩信。这是一个硬性限制权限,在记录的安装程序将权限列入白名单之前,应用程序无法持有该权限。有关详细信息,请参阅 PackageInstaller.SessionParams.setWhitelistedRestrictedPermissions(Set)。
  • RECEIVE_SMS 允许应用程序接收 SMS 消息。这是一个硬性限制权限,在记录的安装程序将权限列入白名单之前,应用程序无法持有该权限。有关详细信息,请参阅 PackageInstaller.SessionParams.setWhitelistedRestrictedPermissions(Set)。
  • RECEIVE_WAP_PUSH 允许应用程序接收 WAP 推送消息。这是一个硬性限制权限,在记录的安装程序将权限列入白名单之前,应用程序无法持有该权限。有关详细信息,请参阅 PackageInstaller.SessionParams.setWhitelistedRestrictedPermissions(Set)。
  • RECORD_AUDIO 允许应用程序录制音频。
  • REORDER_TASKS 允许应用程序更改任务的 Z 顺序。排序系统任务权限,重新排序系统Z轴运行中的任务,南站记录仪中使用了这个权限,估计是为了让程序可以从后台弹到前面。
  • REQUEST_COMPANION_RUN_IN_BACKGROUND 允许配套应用程序在后台运行。此权限意味着 REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND,并允许从后台启动前台服务。如果一个应用不必在后台运行,而只需要从后台启动一个前台服务,可以考虑使用 REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND,功能较弱。
  • REQUEST_COMPANION_SELF_MANAGED 允许应用程序创建“自我管理”关联。在API 级别 33 中添加
  • REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND 允许配套应用从后台启动前台服务。在API 级别 31 中添加
  • REQUEST_COMPANION_USE_DATA_IN_BACKGROUND 允许配套应用在后台使用数据。
  • REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 应用程序必须持有权限才能使用 Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS.
  • RUN_LONG_JOBS 允许应用程序使用长时间运行的作业 API。这是一种特殊的访问权限,可以由系统或用户撤销。应用程序需要针对 APIBuild.VERSION_CODES.UPSIDE_DOWN_CAKE或更高版本才能请求此权限。
  • SCHEDULE_EXACT_ALARM 允许应用程序使用精确的警报 API。
  • SEND_SMS 允许应用程序发送 SMS 消息。这是一个硬性限制权限,在记录的安装程序将权限列入白名单之前,应用程序无法持有该权限。有关详细信息,请参阅 PackageInstaller.SessionParams.setWhitelistedRestrictedPermissions(Set)。
  • SET_ALARM 允许应用程序广播 Intent 以为用户设置闹钟。
  • SET_DEBUG_APP 配置应用程序以进行调试。不供第三方应用程序使用。
  • SET_TIME 允许应用程序直接设置系统时间。不供第三方应用程序使用。
  • SET_TIME_ZONE 允许应用程序直接设置系统时区。不供第三方应用程序使用。
  • SET_WALLPAPER 允许应用程序设置壁纸。
  • SMS_FINANCIAL_TRANSACTIONS允许金融应用程序读取过滤的短信。保护等级:签名|app。此常量在 API 级别 31 中已弃用。使用此权限的 API 不再起作用。
  • STATUS_BAR 允许应用程序打开、关闭或禁用状态栏及其图标。不供第三方应用程序使用。
  • SYSTEM_ALERT_WINDOW 悬浮窗权限,允许应用使用WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY类型创建窗口 ,显示在所有其他应用之上。很少有应用程序应该使用此权限;这些窗口用于与用户进行系统级交互。注意:如果应用程序以 API 级别 23 或更高级别为目标,则应用程序用户必须通过权限管理屏幕明确向应用程序授予此权限。该应用程序通过发送 intent with action Settings.ACTION_MANAGE_OVERLAY_PERMISSION 来请求用户的批准 。应用可以通过调用Settings.canDrawOverlays()来检查自己是否有这个权限 。
  • TRANSMIT_IR 允许使用设备的 IR 发射器(如果可用)。
  • USE_FINGERPRINT 允许应用使用指纹硬件。此常量在 API 级别 28 中已弃用。应用程序应改为USE_BIOMETRIC请求
  • USE_FULL_SCREEN_INTENT 对于Build.VERSION_CODES.Q想要使用 notification full screen intents.
  • VIBRATE 允许访问振动器。
  • WAKE_LOCK 允许使用 PowerManager WakeLocks 防止处理器休眠或屏幕变暗。
  • WRITE_APN_SETTINGS 允许应用程序写入 apn 设置并读取现有 apn 设置的敏感字段,如用户和密码。不供第三方应用程序使用。
  • WRITE_CALENDAR 允许应用程序写入用户的日历数据。
  • WRITE_CALL_LOG 允许应用程序写入(但不能读取)用户的通话记录数据。
  • WRITE_CONTACTS 允许应用程序写入用户的联系人数据。
  • WRITE_EXTERNAL_STORAGE 允许应用程序写入外部存储。
  • WRITE_SECURE_SETTINGS 允许应用程序读取或写入安全系统设置,比如打开或关闭GPS。不供第三方应用程序使用。
  • WRITE_SETTINGS 允许应用程序读取或写入系统设置。注意:如果应用程序以 API 级别 23 或更高级别为目标,则应用程序用户必须通过权限管理屏幕明确向应用程序授予此权限。该应用程序通过发送 intent with action Settings.ACTION_MANAGE_WRITE_SETTINGS来请求用户的批准 。应用可以通过调用 来检查自己是否有这个权限Settings.System.canWrite()

危险权限

  • ACCESS_BACKGROUND_LOCATION 允许应用程序在后台访问位置信息。如果您请求此权限,则还必须请求ACCESS_COARSE_LOCATIONACCESS_FINE_LOCATION。单独请求此权限不会为您提供位置访问权限。
  • ACCESS_COARSE_LOCATION 允许应用访问大概位置。或者,您可能想要ACCESS_FINE_LOCATION
  • ACCESS_FINE_LOCATION 允许应用访问精确位置。或者,您可能想要ACCESS_COARSE_LOCATION
  • ACCESS_MEDIA_LOCATION 允许应用程序访问保存在用户共享集合中的任何地理位置。
  • ANSWER_PHONE_CALLS 允许该应用接听来电。
  • BLUETOOTH_ADVERTISE 需要能够向附近的蓝牙设备做广告。在API 级别 31 中添加。
  • BLUETOOTH_CONNECT 需要能够连接到配对的蓝牙设备。在API 级别 31 中添加。
  • BLUETOOTH_SCAN 需要能够发现和配对附近的蓝牙设备。在API 级别 31 中添加。
  • CALL_PHONE 允许应用程序发起电话呼叫,而无需通过 Dialer 用户界面让用户确认呼叫。
  • CAMERA 需要能够访问相机设备。
  • GET_ACCOUNTS 允许访问帐户服务中的帐户列表。
  • OVERRIDE_WIFI_CONFIG 允许应用程序修改任何 wifi 配置,即使是由另一个应用程序创建的。重新配置后,原始创建者无法进行任何进一步的修改。不供第三方应用程序使用。
  • POST_NOTIFICATIONS 允许应用发布通知。
  • PROCESS_OUTGOING_CALLS 允许应用程序在拨出呼叫期间查看正在拨打的号码,并可选择将呼叫重定向到不同的号码或完全中止呼叫。API 29 中已弃用。
  • READ_CALENDAR 允许应用程序读取用户的日历数据。
  • READ_CALL_LOG 允许应用程序读取用户的通话记录。注意:如果您的应用程序使用
  • READ_CONTACTS 允许应用程序读取用户的联系人数据。
  • READ_EXTERNAL_STORAGE 允许应用程序从外部存储读取。注意:从 API 级别 33 开始,此权限无效。如果您的应用程序访问其他应用程序的媒体文件,请改为请求这些权限中的一项或多项:READ_MEDIA_IMAGES、、 READ_MEDIA_VIDEO。 READ_MEDIA_AUDIO详细了解 与媒体文件关联的存储权限。这个权限里还有很多的描述,具体请查看API文档。
  • READ_MEDIA_AUDIO
  • READ_MEDIA_VIDEO
  • READ_PHONE_NUMBERS 允许读取设备的电话号码。这是由READ_PHONE_STATE授权的一个子集,但但是暴露于即时的应用程序。在API 级别 26 中添加
  • READ_PHONE_STATE 允许以只读方式访问手机状态,包括当前的蜂窝网络信息、任何正在进行的通话的状态以及设备上注册的任何PhoneAccount的列表
  • READ_SMS 允许应用程序读取 SMS 消息。这是一个硬性限制权限,在记录的安装程序将权限列入白名单之前,应用程序无法持有该权限。有关详细信息,请参阅 PackageInstaller.SessionParams.setWhitelistedRestrictedPermissions(Set)。
  • RECEIVE_MMS 允许应用程序监控传入的彩信。这是一个硬性限制权限,在记录的安装程序将权限列入白名单之前,应用程序无法持有该权限。有关详细信息,请参阅 PackageInstaller.SessionParams.setWhitelistedRestrictedPermissions(Set)。
  • RECEIVE_SMS 允许应用程序接收 SMS 消息。这是一个硬性限制权限,在记录的安装程序将权限列入白名单之前,应用程序无法持有该权限。有关详细信息,请参阅 PackageInstaller.SessionParams.setWhitelistedRestrictedPermissions(Set)。
  • RECEIVE_WAP_PUSH 允许应用程序接收 WAP 推送消息。这是一个硬性限制权限,在记录的安装程序将权限列入白名单之前,应用程序无法持有该权限。有关详细信息,请参阅 PackageInstaller.SessionParams.setWhitelistedRestrictedPermissions(Set)。
  • SEND_SMS 允许应用程序发送 SMS 消息。这是一个硬性限制权限,在记录的安装程序将权限列入白名单之前,应用程序无法持有该权限。有关详细信息,请参阅 PackageInstaller.SessionParams.setWhitelistedRestrictedPermissions(Set)。
  • WRITE_CALENDAR 允许应用程序写入用户的日历数据。
  • WRITE_CALL_LOG 允许应用程序写入(但不能读取)用户的通话记录数据。
  • 允许应用程序写入用户的联系人数据。
  • WRITE_EXTERNAL_STORAGE 允许应用程序写入外部存储。

安装/卸载apk权限

  • INSTALL_PACKAGES 允许应用程序安装包。不供第三方应用程序使用。

  • DELETE_PACKAGES 允许应用程序删除包。不供第三方应用程序使用。从开始Build.VERSION_CODES.N,当删除包的应用程序与安装包的应用程序不同时,将请求用户确认。

  • REQUEST_INSTALL_PACKAGES 允许应用程序请求安装包。以 API 大于 25 为目标的应用程序必须持有此权限才能使用Intent.ACTION_INSTALL_PACKAGE。 保护等级:签名

  • REQUEST_DELETE_PACKAGES 允许应用程序请求删除包。以 APIBuild.VERSION_CODES.P或更高版本为目标的应用程序必须持有此权限才能使用Intent.ACTION_UNINSTALL_PACKAGEor PackageInstaller.uninstall(VersionedPackage, IntentSender)。

特权权限

  • INSTANT_APP_FOREGROUND_SERVICE 允许一个即时通信app创建前台服务。 添加在API26
  • MANAGE_EXTERNAL_STORAGE 允许应用程序广泛访问范围存储中的外部存储。旨在供少数需要代表用户管理文件的应用程序使用。
  • MANAGE_MEDIA 允许应用程序在未经用户确认的情况下修改和删除此设备或任何连接的存储设备上的媒体文件。
  • PACKAGE_USAGE_STATS 允许应用程序收集组件使用统计信息。声明权限意味着使用 API 的意图,并且设备的用户可以通过“设置”应用程序授予权限。
  • SYSTEM_ALERT_WINDOW 悬浮窗权限,允许应用使用WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY类型创建窗口 ,显示在所有其他应用之上。很少有应用程序应该使用此权限;这些窗口用于与用户进行系统级交互。注意:如果应用程序以 API 级别 23 或更高级别为目标,则应用程序用户必须通过权限管理屏幕明确向应用程序授予此权限。该应用程序通过发送 intent with action Settings.ACTION_MANAGE_OVERLAY_PERMISSION 来请求用户的批准 。应用可以通过调用Settings.canDrawOverlays()来检查自己是否有这个权限 。
  • WRITE_SETTINGS 允许应用程序读取或写入系统设置。注意:如果应用程序以 API 级别 23 或更高级别为目标,则应用程序用户必须通过权限管理屏幕明确向应用程序授予此权限。该应用程序通过发送 intent with action Settings.ACTION_MANAGE_WRITE_SETTINGS来请求用户的批准 。应用可以通过调用 来检查自己是否有这个权限Settings.System.canWrite()。

一些找不到的权限

有些权限在最新的Manifest.permission中并未找到比如:

<!--关机权限-->
<uses-permission  android:name="android.permission.SHUTDOWN" tools:ignore="ProtectedPermissions" />
  • 1
  • 2
<!--获取手机号及通话状态,比如:获取手机IMEI-->
<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" tools:ignore="ProtectedPermissions" />
  • 1
  • 2
<!--获取MAC地址-->
<uses-permission android:name="android.permission.LOCAL_MAC_ADDRESS" tools:ignore="ProtectedPermissions" />
  • 1
  • 2
<!--发送广播需要的权限 -->
<uses-permission android:name="android.Manifest.permission.INTERACT_ACROSS_USERS" />
  • 1
  • 2
<!--写外置的SDCard时需要的权限,且要求app为系统应用才行。不加这个权限只能访问外置SDCard的android/data/[packagename]位置-->
<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" tools:ignore="ProtectedPermissions" />
  • 1
  • 2
<!--Wifi热点权限-->
<uses-permission android:name="android.permission.MANAGE_USERS" tools:ignore="ProtectedPermissions"/>
<uses-permission android:name="android.permission.CREATE_USERS" tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.OVERRIDE_WIFI_CONFIG" tools:ignore="ProtectedPermissions" />
  • 1
  • 2
  • 3
  • 4
<uses-permission android:name="android.permission.DEVICE_POWER" tools:ignore="ProtectedPermissions" />
  • 1

权限类型

  • 安装时权限,Android 包括几种子类型的安装时权限,包括普通权限和签名权限。
    • 普通权限(normal):这些权限允许访问超出应用程序沙盒范围的数据和操作,但对用户隐私和其他应用程序的操作造成的风险很小。
    • 签名权限(signature):只有当应用程序使用操作系统相同的证书签名时,系统才会授予应用程序签名权限。实现特权服务(例如自动填充或 VPN 服务)的应用程序也使用签名权限。这些应用程序需要服务绑定签名权限,以便只有系统才能绑定到服务。
  • 运行时权限:运行时权限,也称为危险权限(dangerous)为您的应用提供对受限数据的额外访问权限,或让您的应用执行对系统和其他应用影响更大的受限操作。因此,您需要在应用程序中请求运行时权限,然后才能访问受限数据或执行受限操作。不要假设这些权限之前已被授予——检查它们,如果需要,在每次访问之前请求它们。
  • 特殊权限(appop):特殊权限对应于特定的应用程序操作。只有平台和 OEM 可以定义特殊权限。与运行时权限不同,用户必须从系统设置中的特殊应用程序访问页面授予特殊权限。应用程序可以使用意图将用户发送到那里,这会暂停应用程序并启动相应的设置页面以获得给定的特殊权限。用户返回应用程序后,应用程序可以在函数中检查是否已授予权限onResume()。
  • 权限组:权限可以属于权限组。权限组由一组逻辑上相关的权限组成。例如,发送和接收 SMS 消息的权限可能属于同一组,因为它们都与应用程序与 SMS 的交互有关。当应用程序请求密切相关的权限时,权限组可帮助系统最大限度地减少向用户显示的系统对话框的数量。当向用户显示授予应用程序权限的提示时,属于同一组的权限将显示在同一界面中。但是,权限可以在不通知的情况下更改组,因此不要假设特定权限与任何其他权限分组。

运行时权限和特殊权限需要在运行时申请。

在所有权限API中:https://developer.android.com/reference/android/Manifest.permission,可以查看保护级别,就有normal、signature、appop

最佳实践

  • 请求最少数量的权限:当用户请求您的应用中的特定操作时,您的应用应仅请求完成该操作所需的权限。根据您使用权限的方式,可能有另一种方法可以在不依赖对敏感信息的访问的情况下完成应用的用例
  • 将运行时权限与特定操作相关联:尽可能晚地在您的应用程序用例流程中请求权限。例如,如果您的应用允许用户向其他人发送音频消息,请等到用户导航到消息屏幕并按下“发送音频消息”按钮。用户按下按钮后,您的应用程序便可以请求访问麦克风。
  • 考虑您应用的依赖项:当您包含一个库时,您也继承了它的权限要求。请注意每个依赖项所需的权限以及这些权限的用途。
  • 保持透明:当您提出权限请求时,请清楚您正在访问的内容、原因以及如果权限被拒绝会影响哪些功能,以便用户做出明智的决定。
  • 使系统访问显式:当您访问敏感数据或硬件(例如相机或麦克风)时,如果系统尚未 提供这些指示器,请在您的应用程序中提供持续指示。此提醒可帮助用户准确了解您的应用何时访问受限数据或执行受限操作。
  • 要仅在支持运行时权限的设备(即运行 Android 6.0(API 级别 23)或更高版本的设备)上声明权限,请<uses-permission-sdk-23>元素而不是<uses-permission>元素 。使用这些元素中的任何一个时,您可以设置该maxSdkVersion属性以指示运行高于指定值的 Android 版本的设备不需要特定权限。这使您可以消除不必要的权限,同时仍然为旧设备提供兼容性。例如,您的应用可能会显示用户在您的应用中创建的媒体内容,例如照片或视频。在这种情况下,您无需 READ_EXTERNAL_STORAGE 在运行 Android 10(API 级别 29)或更高版本的设备上使用该权限,只要您的应用面向 Android 10 或更高版本。但是,为了与旧设备兼容,您可以声明READ_EXTERNAL_STORAGE权限并将其设置 android:maxSdkVersion为 28。

其它

  • 当权限被撤销时,应用程序进程终止:如果用户撤销了一次性权限,比如在系统设置中,无论您是否启动了前台服务,您的应用都无法访问数据。与任何权限一样,如果用户撤销您应用的一次性权限,您的应用进程将终止。

  • 自动重置未使用应用程序的权限:如果您的应用以 Android 11(API 级别 30)或更高版本为目标,并且几个月未使用,系统会通过自动重置用户授予您的应用的敏感运行时权限来保护用户数据。在指南中了解有关应用程序休眠的更多信息。

  • 必要时请求成为默认处理程序:某些应用依赖于访问与通话记录和短信相关的敏感用户信息。如果您想请求特定于通话记录和 SMS 消息的权限并将您的应用程序发布到 Play 商店,您必须在请求这些运行时权限之前提示用户将您的应用程序设置为核心系统功能的默认处理程序。有关默认处理程序的更多信息,包括向用户显示默认处理程序提示的指南,请参阅有关仅在默认处理程序中使用的权限的指南

  • 授予所有运行时权限以进行测试:要在模拟器或测试设备上安装应用程序时自动授予所有运行时权限,请使用-gadb shell install 命令的选项,如以下代码片段所示:

    adb shell install -g PATH_TO_APK_FILE
    
    • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/630776
推荐阅读
相关标签
  

闽ICP备14008679号