【问题标题】: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

谢谢!

【问题讨论】:

    标签: react-native permissions location expo


    【解决方案1】:

    正如Brent Vatneblog 所说,

    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
        猜你喜欢
        • 2020-08-25
        • 1970-01-01
        • 2020-07-16
        • 1970-01-01
        • 2022-06-11
        • 1970-01-01
        • 2019-05-21
        • 2021-07-14
        相关资源
        最近更新 更多