You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用隐式Intent时resolveActivity行报警告且无法打开网站该如何处理

问题原因

Android 11(API 级别 30)引入了包可见性过滤机制,应用默认无法直接获取设备上安装的其他应用的信息,调用 resolveActivity() 查询可处理网页跳转的浏览器应用时,系统会返回空值,触发警告同时无法正常跳转。

解决方案

步骤1:在清单文件添加<queries>声明

在AndroidManifest.xml的根节点(与<application>节点同级)添加如下配置,声明你需要查询支持http/https协议跳转的应用:

<queries>
    <!-- 适配https链接 -->
    <intent>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="https" />
    </intent>
    <!-- 如需支持http链接,额外添加如下配置 -->
    <intent>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="http" />
    </intent>
</queries>

添加完成后原有代码即可正常运行,警告也会消失。

可选优化:简化逻辑省略查询步骤

你也可以直接跳过resolveActivity()的判断,通过捕获异常处理无可用浏览器的场景,代码更简洁,也不需要额外适配包可见性:

btnWeb.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        String v = et.getText().toString();
        Uri uri = Uri.parse(v);
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        try {
            startActivity(intent);
        } catch (ActivityNotFoundException e) {
            // 此处添加无可用浏览器的提示逻辑即可
        }
    }
});

内容的提问来源于stack exchange,提问作者Siddharth Bhat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:36:04