Expo.ImagePicker在世博会中工作,但在独立Android中不起作用



我们的应用程序允许用户从中拍照(并选择图片)。

为此,我使用了世博会组件ImagePicker,因为它提供了一个简单的API。

它在世博会中完美运行(exp startexp 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.CAMERAPermission.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",

我不知道到底是哪一个解决了问题,但其中一个解决了。

最新更新