跳至主要内容

Android权限

PermissionsAndroid 提供了对 Android M 新权限模型的访问。只要“正常”权限出现在 AndroidManifest.xml 中,它们在应用程序安装时就会默认授予。然而,“危险”权限需要弹出一个对话框。您应该使用此模块来处理这些权限。

在 SDK 版本 23 之前的设备上,如果权限出现在清单文件中,则会自动授予,因此 check 始终应返回 true,而 request 始终应解析为 PermissionsAndroid.RESULTS.GRANTED

如果用户之前关闭了您请求的权限,操作系统会建议您的应用显示需要该权限的理由。可选的 rationale 参数仅在必要时显示对话框提示——否则将显示正常的权限提示。

示例

需要用户提示的权限

PermissionsAndroid.PERMISSIONS 下作为常量提供

  • READ_CALENDAR:'android.permission.READ_CALENDAR'
  • WRITE_CALENDAR:'android.permission.WRITE_CALENDAR'
  • CAMERA:'android.permission.CAMERA'
  • READ_CONTACTS:'android.permission.READ_CONTACTS'
  • WRITE_CONTACTS:'android.permission.WRITE_CONTACTS'
  • GET_ACCOUNTS:'android.permission.GET_ACCOUNTS'
  • ACCESS_FINE_LOCATION:'android.permission.ACCESS_FINE_LOCATION'
  • ACCESS_COARSE_LOCATION:'android.permission.ACCESS_COARSE_LOCATION'
  • ACCESS_BACKGROUND_LOCATION:'android.permission.ACCESS_BACKGROUND_LOCATION'
  • RECORD_AUDIO:'android.permission.RECORD_AUDIO'
  • READ_PHONE_STATE:'android.permission.READ_PHONE_STATE'
  • CALL_PHONE:'android.permission.CALL_PHONE'
  • READ_CALL_LOG:'android.permission.READ_CALL_LOG'
  • WRITE_CALL_LOG:'android.permission.WRITE_CALL_LOG'
  • ADD_VOICEMAIL:'com.android.voicemail.permission.ADD_VOICEMAIL'
  • USE_SIP:'android.permission.USE_SIP'
  • PROCESS_OUTGOING_CALLS:'android.permission.PROCESS_OUTGOING_CALLS'
  • BODY_SENSORS:'android.permission.BODY_SENSORS'
  • SEND_SMS:'android.permission.SEND_SMS'
  • RECEIVE_SMS:'android.permission.RECEIVE_SMS'
  • READ_SMS:'android.permission.READ_SMS'
  • RECEIVE_WAP_PUSH:'android.permission.RECEIVE_WAP_PUSH'
  • RECEIVE_MMS:'android.permission.RECEIVE_MMS'
  • READ_EXTERNAL_STORAGE:'android.permission.READ_EXTERNAL_STORAGE'
  • WRITE_EXTERNAL_STORAGE:'android.permission.WRITE_EXTERNAL_STORAGE'
  • BLUETOOTH_CONNECT:'android.permission.BLUETOOTH_CONNECT'
  • BLUETOOTH_SCAN:'android.permission.BLUETOOTH_SCAN'
  • BLUETOOTH_ADVERTISE:'android.permission.BLUETOOTH_ADVERTISE'
  • ACCESS_MEDIA_LOCATION:'android.permission.ACCESS_MEDIA_LOCATION'
  • ACCEPT_HANDOVER:'android.permission.ACCEPT_HANDOVER'
  • ACTIVITY_RECOGNITION:'android.permission.ACTIVITY_RECOGNITION'
  • ANSWER_PHONE_CALLS:'android.permission.ANSWER_PHONE_CALLS'
  • READ_PHONE_NUMBERS:'android.permission.READ_PHONE_NUMBERS'
  • UWB_RANGING:'android.permission.UWB_RANGING'
  • BODY_SENSORS_BACKGROUND:'android.permission.BODY_SENSORS_BACKGROUND'
  • READ_MEDIA_IMAGES:'android.permission.READ_MEDIA_IMAGES'
  • READ_MEDIA_VIDEO:'android.permission.READ_MEDIA_VIDEO'
  • READ_MEDIA_AUDIO:'android.permission.READ_MEDIA_AUDIO'
  • POST_NOTIFICATIONS:'android.permission.POST_NOTIFICATIONS'
  • NEARBY_WIFI_DEVICES:'android.permission.NEARBY_WIFI_DEVICES'
  • READ_VOICEMAIL:'com.android.voicemail.permission.READ_VOICEMAIL',
  • WRITE_VOICEMAIL:'com.android.voicemail.permission.WRITE_VOICEMAIL',

请求权限的结果字符串

PermissionsAndroid.RESULTS 下作为常量提供

  • GRANTED:'granted'
  • DENIED:'denied'
  • NEVER_ASK_AGAIN:'never_ask_again'

参考

方法

check()

tsx
static check(permission: Permission): Promise<boolean>;

返回一个 Promise,该 Promise 解析为一个布尔值,表示是否已授予指定的权限。

参数

名称类型必需描述
permission字符串要检查的权限。

request()

tsx
static request(
permission: Permission,
rationale?: Rationale,
): Promise<PermissionStatus>;

提示用户启用权限,并返回一个 Promise,该 Promise 解析为一个字符串值(参见上面的结果字符串),指示用户是允许、拒绝请求,还是不想再被询问。

如果提供了 rationale,此函数会向操作系统查询是否需要显示一个对话框来解释为什么需要该权限(https://developer.android.com.cn/training/permissions/requesting.html#explain),然后显示系统权限对话框。

参数

名称类型必需描述
permission字符串要请求的权限。
rationale对象参见下面的 rationale

理由

名称类型必需描述
标题字符串对话框的标题。
消息字符串对话框的消息。
积极按钮字符串积极按钮的文本。
消极按钮字符串消极按钮的文本。
中立按钮字符串中立按钮的文本。

requestMultiple()

tsx
static requestMultiple(
permissions: Permission[],
): Promise<{[key in Permission]: PermissionStatus}>;

在同一个对话框中提示用户启用多个权限,并返回一个对象,该对象以权限作为键,以字符串作为值(参见上面的结果字符串),指示用户是允许、拒绝请求,还是不想再被询问。

参数

名称类型必需描述
permissions数组要请求的权限数组。