3

我想以编程方式启动默认文件资源管理器以向我显示文件夹的内容。

我正在使用这段代码,但它崩溃了:

    Uri startDir = Uri.fromFile(new File("/sdcard/DCIM/Camera")); 
    Intent intent = new Intent(); 
    intent.setAction(Intent.ACTION_VIEW); 
    intent.setData(startDir);
    startActivity(intent);

LogCat 显示“未找到处理 Intent 的活动”...

我最好的选择是什么?我希望用户查看文件夹的内容并能够单击文件(例如单击视频并使用默认播放器启动它,单击 PDF 并打开它等)。

4

2 回答 2

7

不幸的是,似乎没有标准的方法可以做到这一点,我之前一直在寻找完全相同的东西,但找不到任何解决方案。有 2 种替代方法可能对您有用:

1)使用一般意图,让用户选择他/她的文件管理器 这既安全又简单,但离我们真正想要的有点远

Uri startDir = Uri.fromFile(new File(Environment.getExternalStorageDirectory()
        .getAbsolutePath() + "/DCIM/Camera"));
    Intent intent = new Intent();
    intent.setData(startDir);
    intent.setType("*/*");
    intent.setAction(Intent.ACTION_VIEW);
    startActivity(intent);

不要使用intent.setType("file/*");,它不是标准的 MIME 类型。

2) 使用著名文件管理器提供的特定意图 众所周知的文件管理器有自己的自定义意图过滤器,它们接受允许简单浏览的目录路径。其中一些在这里:OI 文件管理器ES Explorer

也许您可以检查用户是否安装了这些特定的文件管理器,然后使用此解决方案,否则回退到一般意图。

目前,这是您仅有的两个选择。如果我找到更好的解决方案,我会更新这篇文章。

于 2013-07-24T20:58:36.093 回答
1

虽然我无法让 OI 文件管理器转到特定目录,但下面直接打开 OI 文件管理器并转到它所在的最后一个目录。

Intent importFileIntent = new Intent();
importFileIntent.setType( "file/*" );

// Does nothing. 
// Uri startingDir = Uri.fromFile( new File(    
//      Environment.getExternalStorageDirectory().getAbsolutePath() + "/DCIM/Camera"));
// importFileIntent.setData( startingDirectory );

importFileIntent.setAction( Intent.ACTION_GET_CONTENT );

// Ensure that there's an activity to handle the intent.
if (importFileIntent.resolveActivity(getPackageManager()) == null) return;

startActivityForResult(importFileIntent, REQUEST_FILE_IMPORT);

如果有人有进一步的成功,我很想听听。

于 2014-04-07T18:33:54.613 回答