首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

带有ACTION_VIEW的Android API 30 getPackageManager.resolveActivity()返回null

问题描述: 带有ACTION_VIEW的Android API 30 getPackageManager.resolveActivity()返回null。

回答: 在Android API 30及以上版本中,如果使用getPackageManager.resolveActivity()方法来获取处理ACTION_VIEW意图的Activity时,可能会返回null。这是由于Android 11(API级别30)引入了一些限制,以增强用户隐私和安全性。

在Android 11中,应用必须在清单文件中声明其需要处理的每个URI模式,而不是依赖于隐式意图。这意味着在使用ACTION_VIEW时,必须在清单文件中明确指定应用能够处理的URI模式。

解决此问题的方法是,在应用的清单文件中,为需要处理的URI模式添加<queries>元素。例如,如果你的应用需要处理http和https协议的URI,可以添加以下代码片段到清单文件的<Application>标签内:

代码语言:txt
复制
<queries>
    <intent>
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="http" />
    </intent>
    <intent>
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="https" />
    </intent>
</queries>

这样做将明确告知系统,你的应用可以处理指定的URI模式,使得getPackageManager.resolveActivity()方法能够正确返回可处理该URI的Activity。

此外,为了进一步提高应用的兼容性和适应性,建议使用AndroidX库中的新API来代替旧的getPackageManager.resolveActivity()方法。新的API是PackageManager.queryIntentActivities(),它返回一个列表,其中包含了所有能够处理指定意图的Activity信息。

以下是一个示例代码,展示了如何使用PackageManager.queryIntentActivities()方法来获取能够处理ACTION_VIEW意图的Activity:

代码语言:txt
复制
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://www.example.com"));

List<ResolveInfo> activities = getPackageManager().queryIntentActivities(intent, 0);
if (!activities.isEmpty()) {
    // 找到了能够处理该意图的Activity
    ResolveInfo resolvedActivity = activities.get(0);
    // 处理resolvedActivity
} else {
    // 没有找到能够处理该意图的Activity
}

在上述代码中,我们首先创建了一个ACTION_VIEW意图,并设置了要访问的URL。然后,使用PackageManager.queryIntentActivities()方法来获取能够处理该意图的Activity列表。如果列表不为空,我们可以从中取出第一个ResolveInfo对象,以进一步处理该Activity。

综上所述,通过在应用的清单文件中声明<queries>元素,并使用PackageManager.queryIntentActivities()方法,可以解决Android API 30上使用getPackageManager.resolveActivity()方法返回null的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

7分46秒

day01_Java语言概述/23-尚硅谷-Java语言基础-API文档的说明

3分12秒

day21_常用类/04-尚硅谷-Java语言高级-复习:日期时间的API

3分39秒

day21_常用类/18-尚硅谷-Java语言高级-其它日期时间相关API的使用

11分55秒

day29_动态代理与Java8新特性/19-尚硅谷-Java语言高级-Stream API的概述

13分29秒

day21_常用类/14-尚硅谷-Java语言高级-JDK8中日期时间API的介绍

16分42秒

day22_枚举类与注解/20-尚硅谷-Java语言高级-集合框架涉及到的API

领券