我正在使用 expo-permission 库中的权限来获取用户的位置坐标:
import * as Location from "expo-location";
import * as Permissions from 'expo-permissions';
const granted = await Permissions.askAsync(Permissions.LOCATION);
上述方法有效,但不断发出警告,表示不推荐使用博览会权限。
如果我使用:
import {Location, Permissions } from 'expo';
它说无法读取未定义的属性“askAsync”。
有人知道我应该使用什么吗?我用的是sdk42
谢谢!
正如Brent Vatne的博客所说,
expo-permissions 已被弃用,取而代之的是
您应该不再使用module-specific permissions methods
和Permissions.askAsync
权限 需要权限的模块导出的方法。Permissions.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;
}
如果有人来到这里并想要获得
ImagePicker
的权限,那么根据 docs 你应该这样做:
import * as ImagePicker from "expo-image-picker";
const getPermissionAsync = async () => {
const { status } = await ImagePicker.requestMediaLibraryPermissionsAsync();
if (status !== "granted") {
alert("...");
}
};
现在有了 expo,每个库都有自己的权限请求方法。
位置示例:
let { status } = await Location.requestForegroundPermissionsAsync();
作品:
import { Camera } from 'expo-camera';
import * as ImagePicker from "expo-image-picker";
const resultPermision = await Camera.requestCameraPermissionsAsync();
const resultPermisionCamera = resultPermision.status;
if (resultPermisionCamera === "denied") {
toastRef.current.show("Gallery permissions are needed");
} else {
const result = await ImagePicker.launchImageLibraryAsync({
allowsEditing: true,
aspect: [4, 3]
})
现在,expo-camera 工作得很好,但我也相信 app.json 方面还有待处理的事情。
还需要添加这些行吗?:
"permissions": [
"CAMERA",
"WRITE_EXTERNAL_STORAGE",
"CAMERA_ROLL"
]
向大家提问:)
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" });
};