Android:如何通过Intent打开特定文件夹并在文件浏览器中显示其内容?

问题描述 投票:60回答:8

我认为这很容易但事实证明不幸的是。

是)我有的:

我的外部存储器上有一个名为“myFolder”的文件夹(不是SD卡,因为它是Nexus 4,但这应该不是问题)。该文件夹包含一些*.csv文件。

我想要的是:

我想编写一个执行以下操作的方法:显示各种应用程序(文件浏览器),我可以从中选择一个(见图片)。单击它后,所选的文件浏览器应该启动并显示“myFolder”的内容。不多也不少。

我的问题:

我到底该怎么做?我想我接下来的代码非常接近,但无论我做什么 - 而且我确定必须有一些我还没有做到的事情 - 它始终只打开来自外部存储器的主文件夹。

public void openFolder()
{
File file = new File(Environment.getExternalStorageDirectory(),
    "myFolder");

Log.d("path", file.toString());

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setDataAndType(Uri.fromFile(file), "*/*");
startActivity(intent);
}
android android-intent directory android-sdcard
8个回答
56
投票

这应该工作:

Uri selectedUri = Uri.parse(Environment.getExternalStorageDirectory() + "/myFolder/");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(selectedUri, "resource/folder");

if (intent.resolveActivityInfo(getPackageManager(), 0) != null)
{
    startActivity(intent);
}
else
{
    // if you reach this place, it means there is no any file 
    // explorer app installed on your device
}

请确保您的设备上安装了任何文件资源管理器应用。

编辑:从评论中添加了shantanu的推荐。

图书馆:如果当前的解决方案对您没有帮助,您还可以查看这些文件/目录选择器库https://android-arsenal.com/tag/35


36
投票

我终于搞定了。这样,选择器(Google Drive,Dropbox,Root Explorer和Solid Explorer)只显示几个应用程序。它与两个浏览器一起工作正常,但不适用于Google Drive和Dropbox(我猜是因为它们无法访问外部存储)。另一种MIME类型如"*/*"也是可能的。

public void openFolder(){
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath()
         +  File.separator + "myFolder" + File.separator);
    intent.setDataAndType(uri, "text/csv");
    startActivity(Intent.createChooser(intent, "Open folder"));
}

3
投票
Intent chooser = new Intent(Intent.ACTION_GET_CONTENT);
Uri uri = Uri.parse(Environment.getDownloadCacheDirectory().getPath().toString());
chooser.addCategory(Intent.CATEGORY_OPENABLE);
chooser.setDataAndType(uri, "*/*");
// startActivity(chooser);
try {
startActivityForResult(chooser, SELECT_FILE);
}
catch (android.content.ActivityNotFoundException ex)
{
Toast.makeText(this, "Please install a File Manager.",
Toast.LENGTH_SHORT).show();
}

在上面的代码中,如果setDataAndType为“* / *”,则打开内置文件浏览器以选择任何文件,如果我设置了“text / plain”,则打开Dropbox。我安装了Dropbox,Google云端硬盘。如果我卸载Dropbox,只有“* / *”可以打开文件浏览器。这是Android 4.4.2。我可以通过getContentResolver()。openInputStream(data.getData())从Dropbox和Google Drive下载内容。


1
投票

此代码适用于OI文件管理器:

        File root = new File(Environment.getExternalStorageDirectory().getPath()
+ "/myFolder/");
        Uri uri = Uri.fromFile(root);

        Intent intent = new Intent();
        intent.setAction(android.content.Intent.ACTION_VIEW);
        intent.setData(uri);
        startActivityForResult(intent, 1);

你可以在这里获得OI文件管理器:http://www.openintents.org/en/filemanager


0
投票

今天,您应该使用其内容来表示文件夹:从存储访问框架获取的URI,打开它应该如下所示:

Intent i = new Intent(Intent.ACTION_VIEW, uri);
startActivity(i);

唉,当您使用外部存储提供程序尝试此操作时,Files应用程序当前包含一个导致其崩溃的错误。但是,可以通过这种方式显示来自第三方提供商的文件夹。


-1
投票
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

intent.setType("text/csv");

intent.addCategory(Intent.CATEGORY_OPENABLE);

try {
      startActivityForResult(Intent.createChooser(intent, "Select a File to Upload"), 0);

} catch (android.content.ActivityNotFoundException ex) {
  ex.printStackTrace();
}

那么你只需要添加响应

public void  onActivityResult(int requestCode, int resultCode, Intent data){

switch (requestCode) {
  case 0: {
     //what you want to do
    //file = new File(uri.getPath());
  }
}
}

-2
投票
File temp = File.createTempFile("preview", ".png" );
String fullfileName= temp.getAbsolutePath();
final String fileName = Uri.parse(fullfileName)
                    .getLastPathSegment();
final String filePath = fullfileName.
                     substring(0,fullfileName.lastIndexOf(File.separator));
Log.d("filePath", "filePath: " + filePath);

完整的文件名:

/模拟题/SD card/download_manager_Farsi/preview.PNG

文件路径:

的/ mnt / SD卡/ Download_Manager_Farsi


-2
投票

你似乎很亲密。

我会尝试像这样设置URI:

String folderPath = Environment.getExternalStorageDirectory()+"/pathTo/folder";

Intent intent = new Intent();  
intent.setAction(Intent.ACTION_GET_CONTENT);
Uri myUri = Uri.parse(folderPath);
intent.setDataAndType(myUri , "file/*");   
startActivity(intent);

但它与你所尝试的并没有太大的不同。告诉我们它是否有变化?

还要确保目标文件夹存在,并在将其发送到intent之前查看生成的Uri对象,它可能不是我们所期望的。

© www.soinside.com 2019 - 2024. All rights reserved.