Q群 567530369,小伙伴们都在这里等你哦~

PermissionsAndroid

PermissionsAndroid 可以访问Android M(也就是6.0)开始提供的权限模型。有一些权限写在AndroidManifest.xml就可以在安装时自动获得,但有一些“危险”的权限则需要弹出提示框供用户选择。本API即用于后一种情形。

在低于Android 6.0的设备上,权限只要写在AndroidManifest.xml里就会自动获得,此情形下check会始终返回true和而request方法将始终解析为PermissionsAndroid.RESULTS.GRANTED

如果用户之前拒绝过你的某项权限请求,那么系统会建议你显示一个为什么需要这个权限的“详细解释”(rationale参数)。如果用户之前拒绝过,那么当你再次申请的时候,弹出的就可能不是原先的申请信息,而是rationale参数里提供的进一步解释。

示例


import {PermissionsAndroid} from 'react-native';

async function requestCameraPermission() {
  try {
    const granted = await PermissionsAndroid.request(
      PermissionsAndroid.PERMISSIONS.CAMERA,
      {
        title: '申请摄像头权限',
        message:
          '一个很牛逼的应用想借用你的摄像头,' +
          '然后你就可以拍出酷炫的皂片啦。',
        buttonNeutral: '等会再问我',
        buttonNegative: '不行',
        buttonPositive: '好吧',
      },
    );
    if (granted === PermissionsAndroid.RESULTS.GRANTED) {
      console.log('现在你获得摄像头权限了');
    } else {
      console.log('用户并不屌你');
    }
  } catch (err) {
    console.warn(err);
  }
}

需要提示用户的权限列表

需要提示用户的权限都以常量形式列在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'
  • 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'

请求权限的返回值

返回值都以常量形式记录在PermissionsAndroid.RESULTS中:

  • GRANTED: 'granted', 表示用户已授权
  • DENIED: 'denied', 表示用户已拒绝
  • NEVER_ASK_AGAIN: 'never_ask_again',表示用户已拒绝,且不愿被再次询问。

查看方法


文档

方法

constructor()


constructor();

check()

check(permission);

检查某项权限是否经过用户授权。返回一个promise,解析为布尔值。

参数:

名称类型必填说明
permissionstring要检查的权限

request()

request(permission, [rationale]);

弹出提示框向用户请求某项权限。返回一个promise,最终值为上文所说的PermissionsAndroid.RESULTS

如果提供了rationale参数,则此方法会和系统协商,是弹出系统内置的权限申请对话框,还是显示rationale中的信息以向用户进行解释。具体原理请参阅android官方文档(https://developer.android.com/training/permissions/requesting.html#explain)。

参数:

名称类型必填说明
permissionstring要请求的权限
rationaleobject见下面的rationale

Rationale:

名称类型必填说明
titlestring对话框的标题。
messagestring对话框的正文。
buttonPositivestring同意按钮的文本。
buttonNegativestring拒绝按钮的文本。
buttonNeutralstring跳过按钮的文本。

requestMultiple()

requestMultiple(permissions);

在一个弹出框中向用户请求多个权限。返回值为一个object,key为各权限名称,值为PermissionsAndroid.RESULTS

参数:

名称类型必填说明
permissionsarrayYes要申请的权限的数组