android - 如果从文件管理器中选择文件,为什么带有意图操作 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()'
可能的错误是什么?
解决方案
推荐阅读
- node.js - 带有集群模块的 socket.io-redis
- flutter - 按多个布尔值排序
- dart - Dart 中抽象静态方法的替代方案
- android - Flutter 错误:SafetyNet Attestation 基本完整性失败
- spring-boot - Spring @JdbcTest 尝试创建其他 bean
- flutter - LateInitializationError: 字段 '_instance@99075166' 尚未初始化
- git - Heroku SSL 证书是否过期?
- javascript - 使用 useState 钩子在对象数组中修改和插入新对象
- linux - 当我使用 Ghidra 反汇编 .so 文件时,什么是未定义函数?
- c# - 停止 Unity Inspector DecoratorDrawer 链接