问题描述
在 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 (将#修改为@)