首页 > 解决方案 > 如果从文件管理器中选择文件,为什么带有意图操作 ACTION_OPEN_DOCUMENT 的 Android 文件选择器在某些设备上不起作用?

问题描述

我正在尝试在 Android 上使用意图操作 ACTION_OPEN_DOCUMENT 来选择 PDF 文件,但在某些设备上它为 null。

我希望用户仅从他的设备中选择 PDF 文件。为此,我使用了意图操作 ACTION_OPEN_DOCUMENT。

这在大多数设备上都能正常工作,但在一些主要是小米的设备上,在文件选择时,它会在尝试使用文件管理器选项在 onActivityResult 中获取意图数据 intent.getData() 时给出 null ,如下图所示。

我试图避免使用操作 ACTION_GET_CONTENT,因为第 3 方应用程序不会将内容限制为仅 pdf。其他应用程序也允许不是 PDF 的格式。

文件选择器图像

在从菜单文件管理器中选择文件的图像中,它给出 null 作为 intent.getData() 但当我从“文档”选项中选择文档时它工作正常。

以下是文件选择器请求的代码

Intent intent = new Intent();
intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("application/pdf");
startActivityForResult(Intent.createChooser(intent, "Choose a file"), Constants.FILE_CHOOSER);

文件选择后

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        final Uri uri = intent.getData(); //Uri is null
    }
}

我期待 intent.getData() 中有一些数据,但它给出了 null。

致命异常:java.lang.RuntimeException:向活动 {com.avail.easyloans.android/com. avail.easyloans.feature.cashup.activities.documents.ActivityUploadBankStmt}:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'java.lang.String android.net.Uri.getAuthority()'

可能的错误是什么?

标签: androidandroid-intentredmi-device

解决方案


推荐阅读