gpt4 book ai didi

java - 从持久 Uri 加载图像时出错

转载 作者:行者123 更新时间:2023-12-01 11:32:26 25 4
gpt4 key购买 nike

程序流程是用户从图库中选择图像并将其显示在 ImageView 中。这很好用。同时,Uri 被写入数据库。

稍后,当程序再次运行或再次显示该 Activity 时,将从数据库中检索 Uri 并再次显示图像。图像的第二次显示是导致异常的原因:

requires android.permission.MANAGE_DOCUMENTS or android.permission.MANAGE_DOCUMENTS

我将权限添加到 list 中,但异常仍然发生。

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS" />

相同的过程尝试显示两个图像,当它来自选择器时它可以工作,但当它来自数据库中的持久 Uri 时会失败。

选择器 Intent

    try {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(
Intent.createChooser(intent, "Select Picture"),
PICK_IMAGE);
} catch (Exception e) {
Toast.makeText(getApplicationContext(),
"Error",
Toast.LENGTH_LONG).show();
Log.e(e.getClass().getName(), e.getMessage(), e);
}

根据我使用的选择器 Intent 的结果

Uri selectedImageUri = data.getData();

随着我使用的数据库读取。 localImage 是一个字符串。

Uri.parse(localImage)

我阅读了此错误报告 https://issues.apache.org/jira/browse/CB-5398 ,但我不确定如何使用它来解决这种情况。下面来自另一个线程的代码似乎试图解决权限和照片选择器的类似问题,但就我而言,我不会再次选择,我只需要显示来自 Uri 的图像。

我猜这是重置权限的问题。我不太确定。我有 list 中的权限。也许我需要不同的代码来显示来自未从选择器获取的 Uri 的图像?也许我需要针对不同的 API?我的 build.gradle 说 targetSdkVersion 21,minSdkVersion 15。这些是默认值。我使用的是 Android Studio 1.0.2。

我被难住了。如有任何帮助,我们将不胜感激。

public static final String KITKAT_VALUE = 1002;

Intent intent;

if (Build.VERSION.SDK_INT < 19){
intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
startActivityForResult(intent, KITKAT_VALUE);
} else {
intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
startActivityForResult(intent, KITKAT_VALUE);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == KITKAT_VALUE ) {
if (resultCode == Activity.RESULT_OK) {
// do something here
}
}
}

最佳答案

At the same time, the Uri is written to a database.

这在 API 级别 19 之前不起作用,并且仅当您使用存储访问框架 (ACTION_OPEN_DOCUMENT) 并获取提供的持久权限时才有效。根据您现有的代码,您为该 Uri 授予的临时权限最晚将在您的进程终止时过期。

I added the permission to the manifest and the exception still occurs.

除非您使用签署固件的签名 key 进行了签名,否则您无法持有MANAGE_DOCUMENTS

关于java - 从持久 Uri 加载图像时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30291531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com