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 | 数组 | 是 | 要请求的权限数组。 |