显示图像的预先存储的URI

问题描述 投票:0回答:1

我想从两个摄像头和画廊图像,并做他们一些东西,然后存储原始图像的URI在SharedPreferences。我可以从他们两个选择,并成功地显示出来,但对于画廊图像,只要我不清除内存(关闭从历史上的应用程序),我可以从sharedprefrences检索它们和ImageView的显示出来,但收盘后从历史上的应用程序,检索到的URI不要再显示。

我存储的URI是这样的:

@Override
protected void onActivityResult(int requestCode, int resultCode,
                                Intent data) {
    if (requestCode == REQUEST_CAPTURE_IMAGE) {
        if (resultCode == RESULT_OK) {
            Uri imageUri = Uri.parse("file:" + photoFile.getAbsolutePath());
            storeInPreferences(imageUri.toString());

        } else Toast.makeText(this, "Canceled", Toast.LENGTH_SHORT).show();
    } 
    else if (requestCode == REQUEST_GALLERY) {
        if (resultCode == RESULT_OK) {
            if (data != null) {
                storeInPreferences(data.getData().toString());
            }
        } else Toast.makeText(this, "Canceled", Toast.LENGTH_SHORT).show();
    }
}

并试图显示使用此代码检索到的URI:

 Picasso.with(mContext)
           .load(Uri.parse(getStringUriFromPrefs()))
           .resize(500, 500)
           .error(R.drawable.ic_error)
           .into(holder.iv_card);

这仅发生于画廊图像。我直接捕捉他们从摄像头这些图像显示良好。

这是库图像的URI(我有问题)

CONTENT://COM.ANDROID.PROVIDERS.MEDIA.DOCUMENTS/DOCUMENT/IMAGE%3A378071

这是对摄像机图像的URI:

FILE:/STORAGE/EMULATED/0/DCIM/CAMERA/20190202_224630_2332127860148701493.JPG

此外,我已经在API级别18尝试过了,它的API级别22和26这是行不通的工作well.but。我没有在其他API级别尝试。

java android image uri
1个回答
0
投票

这是画廊图像的URI

不,事实并非如此。这可能是转换为全部大写后的Uri

然后存储在SharedPreferences原始图像的URI

这将无法可靠地工作。您从东西像UriACTION_GET_CONTENT ACTION_PICK得到任何will work temporarily, in whatever activity that you made those requests in。该Uri可能无法使用其他任何地方,包括您应用的副本。其结果是,节省了Uri像那些不太可能工作得很好。

或者:

  • 不要保存Uri,而是使图像本身的副本
  • 使用ACTION_OPEN_DOCUMENT,因为那么你可以使用takePersistableUriPermissions()ContentResolver能够使用Uri随着时间的推移;要么
  • 不要使用Intent选择图像,而是使用a file picker library或类似的东西
© www.soinside.com 2019 - 2024. All rights reserved.