如何解决在Android 10中,Picasso无需任何许可即可真正显示带有图像Uri的图像,但openInputStream需要许可
在 Android 应用程序中,
和 Android 10 关于范围存储,
Picasso 能够用图像的 Uri 真实地显示图像
并且即使Android的版本是10也不需要任何许可
但是当我尝试使用 openInputStream
时,会出现一个错误,指示未授予权限
我想知道 Picasso 如何在没有任何许可的情况下显示图像但打开流需要许可
代码如下:
Picasso.with(mContext).load(mUri).resize(200,200).into(mImageButton);
InputStream mInputStream;
try
{
mInputStream = mContext.getContentResolver().openInputStream(mUri);
} catch (Exception e) {
e.printStackTrace();
}
错误如下:
java.lang.SecurityException: Permission Denial: reading com.miui.gallery.provider.GalleryOpenProvider uri content://com.miui.gallery.open/raw/storage/emulated/0/Download/MellatMobileBank_Android.apk/icons/jar-gray.png from pid=2300,uid=10251 requires the provider be exported,or grantUriPermission()
那么,我如何在没有授权的情况下获得图像流?
编辑:
我在 onActivityResult
中做了一个测试,可以从中检索图像结果以查看 openInputStream
是否在那里工作
代码如下:
@Override
public void onActivityResult(int requestCode,int resultCode,Intent data) {
if (requestCode == Constants.Uri_M) {
if (resultCode == RESULT_OK) {
Uri_M = data.getData();
Uri_M_String = Uri_M.toString();
mInputStream = getApplicationContext().getContentResolver().openInputStream(Uri_M);
上面的代码工作正常,而下面的代码有相同的先前错误(权限问题):
@Override
public void onActivityResult(int requestCode,Intent data) {
if (requestCode == Constants.Uri_M) {
if (resultCode == RESULT_OK) {
Uri_M = data.getData();
Uri_M_String = Uri_M.toString();
Uri b = Uri.parse(Uri.decode(Uri_M_String));
mInputStream = getApplicationContext().getContentResolver().openInputStream(b);
关键是 Picasso 使用 Uri_M_String 工作正常,但对于 openInputStream
,我首先将 Uri_M_String
转换为 Uri_M
,如下所示:
Uri Uri_M = Uri.parse(Uri.decode(Uri_M_String));
然后:
mInputStream = getApplicationContext().getContentResolver().openInputStream(Uri_M);
导致错误
所以问题是我正在做的从 Uri 字符串中获取 Uri 的转换
但是我怎样才能从它的 Uri 字符串中得到真正的 Uri?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。