繁体   English   中英

intent.resolveActivity 在 API 30 中的 android.intent.action.OPEN_DOCUMENT 上返回 null

[英]intent.resolveActivity returns null on android.intent.action.OPEN_DOCUMENT in API 30

我在选择 pdf 文件时遇到问题。 之前,targetSdk 是 29 并且工作正常,但是当我将其更新到 30 时,Android 11 及更高版本的设备无法打开文件管理器来选择 pdf 文件。 版本低于 Android 11 的设备运行良好。 这是创建 Intent 的代码:

Intent intent = new Intent("android.intent.action.OPEN_DOCUMENT");
intent.addCategory("android.intent.category.OPENABLE");
intent.setType("application/pdf");

这是启动意图的代码:

boolean canBeLaunched = false;
if (intent.resolveActivity(fragment.getActivity().getPackageManager()) != null) {
    canBeLaunched = true;
    fragment.startActivityForResult(intent, requestCode);
}

在调试时,intent.resolveActivity 在 Android 11 及更高版本上返回 null。

在 Android 11 中对包的可见性进行了一些更改,一些信息HEREHERE

请注意, resolveActivity应该返回可以处理此意图的应用程序的包名称。 这违反了上述新引入的规则和新政策

而是尝试在没有if的情况下严格运行startActivityForResult并将其包装在try { ... } catch (ActivityNotFoundException ex){}

boolean canBeLaunched;
try {
    fragment.startActivityForResult(intent, requestCode);
    canBeLaunched = true
} catch (ActivityNotFoundException ex){
    canBeLaunched = false
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM