使用 FileProvider 用相机捕获图像,如何存储 uri

Capture image with camera using FileProvider, how to store uri

我已经学习了 this, this or this 等关于如何使用 FileProvider 用相机拍摄照片并将其存储在临时文件中供以后上传的教程。

它们都生成一个文件,使用文件提供程序获取 uri,然后使用此 uri 调用 CAmera intent:

 val intent = Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE)
        if (uri != null) {
            try {
                if (intent.resolveActivity(activity.packageManager) != null) {
                    intent.putExtra(MediaStore.EXTRA_OUTPUT, uri)
                    activity.startActivityForResult(intent, resultCode)
                }
            } catch (t: Throwable) {
                Timber.e(t, t.message)
            }
        }

然后在 onActivityResult 他们使用以下方法获取图像:

 @Override
protected void onActivityResult(int requestCode, int resultCode,
                                              Intent data) {
    if (requestCode == REQUEST_IMAGE_CAPTURE) {
           //don't compare the data to null, it will always come as  null because we are providing a file URI, so load with the imageFilePath we obtained before opening the cameraIntent
        Glide.with(this).load(imageFilePath).into(mImageView);   
        // If you are using Glide.
    }
}

因此引用本教程"load with the imageFilePaht we obtained before opening the cameraIntent"。

在大多数情况下它是有效的,但是当我出于某种原因尝试使用模拟器时,我的 activity 在相机应用程序启动时被破坏(可能是低内存)并且我对 Uri 的引用是空的我从相机回来。

我可以从 activity 的结果中检索这个 Uri 吗?或者我真的必须将它存储在 sharedpreferences 或类似的地方吗?

and my reference of the Uri is null when I come back from the camera

Uri 保存在任何 activity 或片段调用 startActivity() 以启动 ACTION_IMAGE_CAPTURE 应用程序的已保存实例状态 Bundle 中。有关执行此操作的 ACTION_IMAGE_CAPTURE 请求的完整实施,请参阅 this sample app