React Native expo-permission 已弃用现在使用啥?

Posted

技术标签:

【中文标题】React Native expo-permission 已弃用现在使用啥?【英文标题】:React Native expo-permission deprecated what to use now?React Native expo-permission 已弃用现在使用什么? 【发布时间】:2021-10-10 13:19:43 【问题描述】:

我正在使用 expo-permission 库中的权限来获取用户的位置坐标:

import * as Location from "expo-location";
import * as Permissions from 'expo-permissions';

const granted = await Permissions.askAsync(Permissions.LOCATION);

上述方法有效,但不断发出警告说不推荐使用expo-permissions。

如果我使用:

import Location, Permissions  from 'expo';

它说无法读取未定义的属性“askAsync”。

有人知道我应该使用什么吗?我用sdk42

谢谢!

【问题讨论】:

【参考方案1】:

正如Brent Vatne 的blog 所说,

expo-permissions 已被弃用,取而代之的是 module-specific permissions methods 您应该从使用迁移 Permissions.askAsyncPermissions.getAsync 到权限 需要权限的模块导出的方法。

例如:您应该替换调用 Permissions.askAsync(Permissions.CAMERA)Camera.requestPermissionsAsync()

不应该有两种方法可以在一个 SDK 中做同样的事情, 所以我们选择了我们喜欢的方法并正在巩固 它。

所以现在,您将不得不使用各个包中的Permissions

对于位置,

首先,安装expo-location

expo install expo-location

那你就可以这样使用了

import * as Location from 'expo-location';

let  status  = await Location.requestForegroundPermissionsAsync();
if (status !== 'granted') 
  console.log('Permission to access location was denied');
  return;

【讨论】:

【参考方案2】:

现在有了 expo,每个库都有自己的权限请求方法。

位置示例:

let  status  = await Location.requestForegroundPermissionsAsync();

Documentation

【讨论】:

谢谢它的工作我赞成另一个,因为解释得更详细,但你的答案是正确的!【参考方案3】:

如果有人来这里并想获得ImagePicker 的权限,那么根据docs 你应该这样做:

import * as ImagePicker from "expo-image-picker";


  const getPermissionAsync = async () => 
    const  status  = await ImagePicker.requestMediaLibraryPermissionsAsync();
    if (status !== "granted") 
      alert("...");
    
  ;

【讨论】:

【参考方案4】:
import  Camera  from "expo-camera";

this.state = 
  hasCameraPermission: null,
  type: Camera.Constants.Type.back,
;
componentDidMount = async () => 
  const  status  = await Camera.requestCameraPermissionsAsync();
  this.setState( hasCameraPermission: status === "granted" );
;

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于React Native expo-permission 已弃用现在使用啥?的主要内容,如果未能解决你的问题,请参考以下文章

react-native:无法使用发布模式访问Android权限

任务 ':expo-permissions:compileDebugKotlin' 执行失败

react-native init 指定 react 版本和 react-native 版本

添加 React-Native-Camera 和 React-Native-Push-Notification 后无法构建 React Native

react native 增加react-native-camera

更新 react-native-maps 以使用 create-react-native-app