Expo.ImagePicker适用于Expo,但不适用于独立Android

时间:2017-10-23 10:12:31

标签: android react-native expo

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

我已经使用了 Expo 组件 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中那样启动相机/选择器。

任何帮助?

2 个答案:

答案 0 :(得分:1)

以下更改解决了问题:

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",

我不确切知道哪一个解决了这个问题,但其中一个解决了问题。

答案 1 :(得分:0)

这是使用docs链接的正确解决方案

询问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

Docs link here

Reference