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

Posted

技术标签:

【中文标题】在没有安装任何文件管理器的 Android 中选择一个文件【英文标题】:Pick a file in Android without any file manager installed 【发布时间】:2015-09-30 13:11:49 【问题描述】:

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

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

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

android.content.ActivityNotFoundException:未找到处理 Intent 的 Activity act=android.intent.action.GET_CONTENT typ=file/*

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

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

【问题讨论】:

【参考方案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

您可以在自己的应用程序中找到一个库或代码来选择文件:http://bit.ly/1N1fZbO

【讨论】:

感谢您的建议。看起来我必须要求用户安装第三个应用程序【参考方案2】:

下面的代码部分应该适合你!

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 可能没有发布此类活动。

【讨论】:

对不起,忘了说安卓版本了。现在是 4.0! 如果*/*,它要求“音乐曲目”、“联系人”和“画廊”。虽然不能选择一个文件。顺便说一句,我用的是模拟器。

以上是关于在没有安装任何文件管理器的 Android 中选择一个文件的主要内容,如果未能解决你的问题,请参考以下文章

相机文件选择器未在 WebView android 中打开

Xamarin.Forms / Xamarin.Android的任何插件用于选择保存文件的目录?

android studio安装完为啥在桌面没有快捷方式

在android上选择文件夹对话框?

eclipse没有创建Android文件夹

Jenkins+Gradle+Github实现Android自动化打包