React native 如何在react native中一次请求多个权限

React native 如何在react native中一次请求多个权限,react-native,permissions,react-native-android,react-native-ios,React Native,Permissions,React Native Android,React Native Ios,我希望在一个页面上请求权限,而不是等待每个特定情况。但是,我不想要多个弹出窗口。是否有一种方法可以通过单个弹出窗口/模式请求权限 在android方面,我发现了这个和,看起来很有希望,但是我还没有找到iOS的一些东西。确保您也在清单文件中添加了相应的权限 export async function GetAllPermissions() { try { if (Platform.OS === "android") { const userResponse = await

我希望在一个页面上请求权限,而不是等待每个特定情况。但是,我不想要多个弹出窗口。是否有一种方法可以通过单个弹出窗口/模式请求权限


在android方面,我发现了这个和,看起来很有希望,但是我还没有找到iOS的一些东西。

确保您也在清单文件中添加了相应的权限

export async function GetAllPermissions() {
  try {
    if (Platform.OS === "android") {
      const userResponse = await PermissionsAndroid.requestMultiple([
        PermissionsAndroid.PERMISSIONS.READ_CONTACTS,
        PermissionsAndroid.PERMISSIONS.CALL_PHONE
      ]);
      return userResponse;
    }
  } catch (err) {
    Warning(err);
  }
  return null;
}

Android中的

首先将权限添加到AndroidManifest.xml文件中,然后

if (Platform.OS === 'android') {
    PermissionsAndroid.requestMultiple(
      [PermissionsAndroid.PERMISSIONS.CAMERA, 
      PermissionsAndroid.PERMISSIONS.READ_CONTACTS,
      PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
      PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION,
      PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,
      PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE]
      ).then((result) => {
        if (result['android.permission.ACCESS_COARSE_LOCATION']
        && result['android.permission.CAMERA']
        && result['android.permission.READ_CONTACTS']
        && result['android.permission.ACCESS_FINE_LOCATION']
        && result['android.permission.READ_EXTERNAL_STORAGE']
        && result['android.permission.WRITE_EXTERNAL_STORAGE'] === 'granted') {
          this.setState({
            permissionsGranted: true
          });
        } else if (result['android.permission.ACCESS_COARSE_LOCATION']
        || result['android.permission.CAMERA']
        || result['android.permission.READ_CONTACTS']
        || result['android.permission.ACCESS_FINE_LOCATION']
        || result['android.permission.READ_EXTERNAL_STORAGE']
        || result['android.permission.WRITE_EXTERNAL_STORAGE'] === 'never_ask_again') {
          this.refs.toast.show('Please Go into Settings -> Applications -> APP_NAME -> Permissions and Allow permissions to continue');
        }
      });
  }
在iOS中 在XCode上项目的信息部分

  • 添加权限和说明 say-ex:隐私-联系人使用说明 那么


要请求多个权限,我建议您使用,因为这样可以节省时间,易于设置,最重要的是您不必担心平台:)

安装

npm install --save react-native-permissions
用法

import Permissions from 'react-native-permissions'

// Check the status of multiple permissions
  _checkCameraAndPhotos = () => {
    Permissions.checkMultiple(['camera', 'photo']).then(response => {
      //response is an object mapping type to permission
      this.setState({
        cameraPermission: response.camera,
        photoPermission: response.photo,
      })
    })
  }

别忘了为android的AndroidManifest.xml和iOS的Info.plist添加权限(Xcode>=8)

谢谢你的回复。iOS有类似的功能吗?据我记忆所及,在
info.plist
中放置所需的权限是否有效,我不确定。如果添加新的react本机软件包对您来说不是问题,那么我将推荐您其他人。请给我一些时间检查我是如何做到的,并将更新您。您可以使用
Object.keys(results)。every((result)=>result==“grated”)
Object.keys(results)。some((result)=>result====“永远不要再问了”)
import Permissions from 'react-native-permissions'

// Check the status of multiple permissions
  _checkCameraAndPhotos = () => {
    Permissions.checkMultiple(['camera', 'photo']).then(response => {
      //response is an object mapping type to permission
      this.setState({
        cameraPermission: response.camera,
        photoPermission: response.photo,
      })
    })
  }