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
相关产品推荐
相关产品推荐

