我们的应用程序允许用户从中拍照(并选择图片)。
为此,我使用了世博会组件ImagePicker,因为它提供了一个简单的API。
它在世博会中完美运行(exp start
和exp publish
),但在独立的apk中不起作用。
当我尝试调用ImagePicker.launchCameraAsync()
时,我捕获了一个 EUNSPECIFIED 异常,但仅在独立 apk 中。
详
代码摘录:
import { ImagePicker } from 'expo';
(...)
const image = await ImagePicker.launchCameraAsync({
allowsEditing: true,
aspect: [3, 5],
});
(...)
let image = await ImagePicker.launchImageLibraryAsync({
allowsEditing: true,
aspect: [3, 5],
});
它在世博会中运行良好,包括exp publish
版本。
至于我在app.json
的权限,我拥有以下内容:
(...)
"android": {
"package": "br.com.miredefamilia",
"versionCode": 3,
"permissions": [
"android.permissions.CAMERA",
"android.permissions.READ_INTERNAL_STORAGE",
"android.permissions.READ_EXTERNAL_STORAGE"
]
}
我也尝试过没有android.permissions
.
手机确实请求了权限,我接受它,并且它不会像在expo
中那样启动相机/选择器。
有什么帮助吗?
这是带有文档链接的正确解决方案
要求Permission.CAMERA
和Permission.CAMERA_ROLL
const { status } = await Permissions.askAsync(Permissions.CAMERA, Permissions.CAMERA_ROLL)
if (status === 'granted') {
ImagePicker.launchCameraAsync({
mediaTypes: 'Images',
allowsEditing: true,
aspect: [1, 1]
})
} else {
// ask user to turn on permission here
}
同时使用此权限更新 app.json
CAMERA
READ_EXTERNAL_STORAGE
READ_INTERNAL_STORAGE
文档链接在这里
参考
以下更改已修复该问题:
在app.json
"android": {
"package": "br.com.miredefamilia",
"versionCode": 3,
"permissions": [
"CAMERA",
"READ_INTERNAL_STORAGE",
"WRITE_INTERNAL_STORAGE",
"READ_EXTERNAL_STORAGE",
"WRITE_EXTERNAL_STORAGE"
]
}
对组件的调用,我删除了参数:
const image = await ImagePicker.launchCameraAsync();
let image = await ImagePicker.launchImageLibraryAsync();
我还删除了依赖项:
"react-native-camera": "^0.10.0",
我不知道到底是哪一个解决了问题,但其中一个解决了。