Android 10 ACTION_VIEW赢得';不显示作用域存储以外的图像

Android 10 ACTION_VIEW赢得';不显示作用域存储以外的图像,android,android-intent,scoped-storage,Android,Android Intent,Scoped Storage,我在/storage/simulated/0/DCIM/Camera/xyz.jpg 我想从我的应用程序中使用ACTION_VIEW打开此图像。 我使用的代码是 File file = new File("/storage/emulated/0/DCIM/Camera/xyz.jpg"); Uri uri = FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName()

我在
/storage/simulated/0/DCIM/Camera/xyz.jpg
我想从我的应用程序中使用ACTION_VIEW打开此图像。 我使用的代码是

File file = new File("/storage/emulated/0/DCIM/Camera/xyz.jpg");
Uri uri = FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".provider", file);
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(uri, "image/jpeg");
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
我的提供者路径已更改

<external-path name="external_files" path="." />

上面的意图显示了一个选择器来选择gallery/photos应用程序,系统的gallery应用程序显示一个空白的白色屏幕,错误为
文件格式不受支持或文件已损坏
,而photos应用程序只是挂在加载屏幕上


所以我的问题是:是否可以使用ACTION\u视图直接打开文件(作用域外的存储)?或者我必须先将文件复制到作用域存储,然后用操作视图显示它吗?


答:无法使用操作视图打开作用域存储之外的文件。由于我们无法访问该文件,因此也无法复制该文件。因此,我们可以使用ACTION\u OPEN\u DOCUMENT让用户选择文件,也可以将文件复制到作用域存储并继续使用ACTION\u VIEW。

“是否可以使用ACTION\u VIEW直接打开文件(作用域存储外部)?--使用上面所示的方法,这仅在您具有该文件的读取权限时才起作用。”。我猜你没有。我确实有
READ\u EXTERNAL\u STORAGE
权限。“但我的用例有点不同,我只能打开特定的文件”--抱歉,但这可能不是一个选项。您还可以尝试使用
MediaStore
,因为这是一个图像。“因此,确实不可能使用ACTION_VIEW在作用域存储之外打开特定文件,因为我将无法访问它们?”--是的。但你最初的前提是复制文件是一种选择,你也不能这样做,因为你没有文件的读权限。我感到孤独@shivampokhriyal,我也面临同样的问题。正如您所说,ACTION_视图在作用域存储之外不起作用。但是,如果要使用MediaStore API复制文件,请获取其他应用程序的图像或视频的URI,并将其复制到作用域存储文件夹(即您的应用程序文件夹),然后使用ACTION_VIEW。我就是这样解决这个问题的。另一个不复制内容的解决方案是,你可以在你的应用程序中有类似于ACTION_VIEW行为的自定义屏幕,并使用MediaStore api打开它