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

Flutter项目中Android 12及更高版本无法打开WhatsApp问题求助

Android 12+ 无法从Flutter应用打开WhatsApp的解决方案

问题根源是Android 12(API 31)及以上版本引入了包可见性限制,默认情况下应用无法查询其他已安装应用的信息,导致之前的跳转逻辑失效。

解决步骤

1. 配置AndroidManifest.xml

在AndroidManifest.xml的<manifest>标签内添加<queries>块,声明需要访问的WhatsApp包名:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 其他原有配置 -->
    
    <queries>
        <!-- 普通WhatsApp包名 -->
        <package android:name="com.whatsapp" />
        <!-- 可选:WhatsApp商务版包名 -->
        <package android:name="com.whatsapp.w4b" />
    </queries>

    <application ...>
        <!-- 应用组件配置 -->
    </application>
</manifest>

2. 调整Flutter端跳转逻辑

使用url_launcher包实现跳转(需先执行flutter pub add url_launcher安装),先检测WhatsApp是否可访问再跳转:

import 'package:url_launcher/url_launcher.dart';

Future<void> launchWhatsApp(String phoneNumber) async {
  // phoneNumber需带国家码,例如"8613800138000"(无需+号)
  final whatsappUrl = Uri.parse('whatsapp://send?phone=$phoneNumber');
  
  if (await canLaunchUrl(whatsappUrl)) {
    await launchUrl(whatsappUrl);
  } else {
    // 处理WhatsApp未安装的场景,比如提示用户安装
    print('请先安装WhatsApp应用');
  }
}

关键说明

  • 包可见性限制要求应用显式声明需要交互的其他应用,否则PackageManager无法检测到WhatsApp的存在,跳转Intent会被系统拦截。
  • 如果使用原生Platform Channel实现跳转,同样需要在Manifest中添加上述queries配置,否则调用packageManager.getPackageInfo会返回null。

内容的提问来源于stack exchange,提问作者SM Huzaifa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:15:36