【问题标题】:Pick a file in Android without any file manager installed在没有安装任何文件管理器的 Android 中选择一个文件
【发布时间】: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("*/*");,它没有崩溃,但弹出窗口要求采取行动(视频、联系人……),这是不正确的。我只想选择任何文件,而不仅仅是指定类型。

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

【问题讨论】:

    标签: android android-intent file-manager filepicker


    【解决方案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
    }
    

    【讨论】:

    • 感谢您的建议。看起来我必须要求用户安装第三个应用程序
    【解决方案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!
    • 如果*/*,它要求“音乐曲目”、“联系人”和“画廊”。虽然不能选择一个文件。顺便说一句,我用的是模拟器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 1970-01-01
    相关资源
    最近更新 更多