在 Android 上使用 launchCameraAsync() 后,Expo-image-picker 导致应用程序崩溃

Ari*_*ari 3 android react-native expo imagepicker

我正在使用 expo-image-picker 来允许用户选择并拍照。从库中选择图像可以按预期工作,但是在使用相机时,拍照后应用程序崩溃。这是我的代码:

const take = async () => {
    let result = await ImagePicker.launchCameraAsync({
      mediaTypes: ImagePicker.MediaTypeOptions.Images,
      quality: 1,
      
    });

    console.log(result.uri);
    if (!result.cancelled) {
      setImageUri(result.uri);
    }
  };
Run Code Online (Sandbox Code Playgroud)

我认为我拥有所有必需的权限,并且问题似乎只发生在内存有限的旧版 Android 设备上。有任何想法吗?

Gus*_*cia 5

没有好的、简单的解决方案。

发生的情况是,当您启动相机时,它会作为新的相机启动Activity,使您的应用程序留mainActivity在后台。

从 Android P (9) 及更高版本开始,操作系统可以终止您的后台活动。甚至有一个网站的实施对于开发人员来说更糟糕:https ://dontkillmyapp.com/


可能的解决方案:

  1. 做好崩溃的准备。将所有状态和导航堆栈保存在本地存储、launchCamera 上。该应用程序将重新启动,您将恢复所有屏幕/导航/数据/等,并使用ImagePicker.getPendingResultAsync.
  2. 将lib更改为expo-camerareact-native-vision-camera,因为它们使用相机,mainActivity但需要无聊的重新实现,并且看起来不如制造商本机相机好。