通过intent

时间:2018-03-03 14:38:47

标签: android android-intent

最近我正在开发一个文件共享应用程序,我创建了一个GridView,其中显示了下载的文件。从这个View,我希望能够通过intent打开默认应用程序,打开整个文件。目前我正在测试只有图像文件的应用程序。所有文件都以这种方式下载到外部公共目录:

File externalFolder = new File(Environment.getExternalStorageDirectory(), "My application");
if(!externalFolder.exists()){
    externalFolder.mkdir();
}
...
File folder = new File(externalFolder, "Images");
if(!folder.exists()){
    folder.mkdir();
}
...
String filename = folder.getAbsolutePath() + "/" + fileToDownload.getName() + "." + fileToDownload.getExtension();
FileOutputStream fos = new FileOutputStream(filename);

下载文件后,我使用MediaScannerConnection.scanFile进行扫描。扫描成功,图片在照片应用程序中的其他文件中可见。

下载文件后,我可以在GridView的适配器中提取缩略图,所以我肯定有一个有效的文件路径。

乐趣开始的地方:我尝试将onClickListener设置为适配器中的GridView项目,以便能够以这种方式打开照片应用中的图片:

listItem.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            if(new File(current.getPath()).exists()){
                Log.e("path", "valid");
            }else{
                Log.e("path", "invalid");
            }
            Log.e("path", Uri.parse("content://"+current.getPath()).toString());
            intent.setDataAndType(Uri.parse("content://"+current.getPath()), "image/*");
            getContext().startActivity(intent);
        }
    });

Intent创建成功,我在日志中得到以下内容:

E/path: valid
E/path: content:///storage/emulated/0/My application/Images/best_picture_ever.jpeg

我可以选择要打开的应用。当我选择应用程序时,它无法打开图像,就像它不存在一样。所有5个申请。

我在我的设备上使用Oreo进行了测试,在两个使用Nougat和Lollipop的模拟设备上进行了测试,所有这些设备的行为都相同。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

  

我做错了什么?

您没有创建有效的Uri。您不能将content://置于任意事物的前面并拥有一个有用的Uri,而不仅仅是https://置于任意事物之前并拥有可用的URL。

Use FileProvider提供此文件。