使用默认资源管理器在Android中查看文件夹内容

时间:2013-07-24 20:12:38

标签: android android-intent

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

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

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

LogCat显示“找不到处理意图的活动”......

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

2 个答案:

答案 0 :(得分:7)

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

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 file managerES Explorer

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

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

答案 1 :(得分: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);

如果有人取得进一步的成功,我很乐意听到。