PermissionsAndroid¶
Необходим проект с нативным кодом
Следующая глава относится только к проектам с открытым кодом. Если вы используете управляемый рабочий процесс Expo, смотрите руководство по Разрешениям в документации Expo для соответствующей альтернативы.
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'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_PMS: 'android.permission.RECEIVE_SMS'RECEIVE_WAP_PUSH: 'android.permission.RECEIVE_WAP_PUSH'RECEIVE_MMS: 'android.permission.RECEIVE_MMS'READ_EXTERNAL_SMS: 'android.permission.READ_SMS'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: 'разрешено'DENIED: 'отказано'NEVER_ASK_AGAIN: 'never_ask_again'
Методы¶
check()¶
1 | |
Возвращает обещание, разрешающее булево значение о том, были ли предоставлены указанные разрешения.
Параметры:
| Имя | Тип | Описание |
|---|---|---|
permission (обязательно) | string | Разрешение, которое необходимо проверить. |
request()¶
1 2 3 4 | |
Предлагает пользователю включить разрешение и возвращает обещание, разрешающееся в строковое значение (см. строки результата выше), указывающее, разрешил ли пользователь запрос или отклонил его, или не хочет, чтобы его спрашивали снова.
Если указано rationale, эта функция проверяет в ОС, нужно ли показать диалог, объясняющий, зачем нужно разрешение, а затем показывает системный диалог разрешения.
Параметры:
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
permission | string | Да | Разрешение на запрос. |
rationale | object | Нет | См. rationale ниже. |
Обоснование:
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
title | string | Да | Заголовок диалога. |
message | string | Да | Сообщение диалога. |
buttonPositive | string | Да | Текст позитивной кнопки. |
buttonNegative | string | Нет | Текст негативной кнопки. |
buttonNeutral | string | Нет | Текст нейтральной кнопки. |
requestMultiple()¶
1 2 3 | |
Предлагает пользователю включить несколько разрешений в одном диалоге и возвращает объект с разрешениями в качестве ключей и строками в качестве значений (см. строки результата выше), указывая, разрешил ли пользователь или отклонил запрос, или не хочет, чтобы его спрашивали снова.
Параметры:
| Имя | Тип | Обязательно | Описание |
|---|---|---|---|
permissions | array | Да | Массив запрашиваемых разрешений. |