在没有安装任何文件管理器的Android中选择文件

时间:2015-09-30 13:11:49

标签: android android-intent file-manager filepicker

我尝试使用以下代码从内部或外部存储中挑选文件:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("file/*");
startActivityForResult(intent, 1);

当然它有onActivityResult方法,这不是问题。它适用于安装了文件管理器的现代手机或手机。但是没有文件管理器的旧版本会抛出

  

android.content.ActivityNotFoundException:找不到处理Intent的活动{act = android.intent.action.GET_CONTENT typ = file / *}

我尝试切换到ACTION_PICK但没有运气。我也尝试了intent.setType("*/*");,它没有崩溃,但弹出窗口要求采取行动(视频,联系人......)这是不正确的。我只想挑选任何不仅仅是指定类型的文件。

我不想仅使用任何其他文件管理器来选择文件。无论如何我可以通过这个吗?

2 个答案:

答案 0 :(得分:1)

我相信解释错误会使解决方案变得更容易。所以让我向你解释一下:

你正在开始隐含的意图。这意味着你意图知道你想要发生什么(使用选择一个文件)并且你不关心哪个应用程序会这样做。

您遇到的错误只是系统告诉您(开发人员),没有安装能够执行此操作的应用程序(系统和第三方)。根本没有人能够处理你想要的动作。

所以我可以从中看到两个选项:

  • try-catch错误

try {
   startActivityForResult(intent, 1);
} catch (ActivityNotFoundException e) {
   // maybe you should show a toast to the user here?
   Toast.makeText(context, "You need to install a file picker", Toast.LENGTH_SHORT).show();
   // or maybe redirect to a 3rd party app that you know works
   startIntent(new Intent(Uri.parse("https://play.google.com/... some app
}

答案 1 :(得分:0)

以下代码部分应该适合您!

Intent chooseFile = new Intent(Intent.ACTION_GET_CONTENT);
chooseFile.setType("*/*");
Intent intent = Intent.createChooser(chooseFile, "Choose a file");
startActivityForResult(intent, ACTIVITY_CHOOSE_FILE);

您的Android版本是什么?有些Android可能没有发布此类活动。