Flutter中url_launcher包在Android11/12真机无法运行求助
解决url_launcher在Android 11/12真机无法打开WhatsApp的问题
问题原因
Android 11(API 30)及以上系统引入了包可见性限制,默认情况下应用无法检测其他已安装应用的存在,导致canLaunchUrl返回false,即使设备上已安装WhatsApp。此外,代码中使用的HTML转义符也会导致Uri解析错误。
修复步骤
1. 添加包可见性声明(核心)
在android/app/src/main/AndroidManifest.xml的<manifest>标签内、<application>标签外添加以下配置,声明需要访问WhatsApp应用:
<queries> <!-- 针对普通WhatsApp --> <package android:name="com.whatsapp" /> <!-- 如需支持WhatsApp Business,追加此行 --> <package android:name="com.whatsapp.w4b" /> </queries>
2. 修正Uri参数分隔符
代码中的&是HTML转义字符,会导致Uri解析异常,需替换为标准的参数分隔符&:
void openWhatsapp() async { var whatsapp = '+9033823498234'; var whatsappURL = Uri.parse( 'whatsapp://send?phone=$whatsapp&text=Merhaba, danışmanlık hakkında bilgi almak istiyorum.'); if (await canLaunchUrl(whatsappURL)) { await launchUrl(whatsappURL); } else { ScaffoldMessenger.of(context).showSnackBar( const SnackBar( content: Text("WhatsApp is not installed on the device"), ), ); } }
3. 确保url_launcher版本兼容
检查pubspec.yaml中的url_launcher版本,使用6.0.0及以上版本(已适配Android 11包可见性规则):
dependencies: url_launcher: ^6.2.0 # 或更高稳定版本
4. 验证targetSdkVersion
若你的targetSdkVersion为30(Android 11)或更高,上述配置即可生效。可通过flutter doctor -v查看当前Flutter使用的默认targetSdkVersion,确认符合要求。
完成以上操作后,重新打包安装到Android 11/12真机,即可正常调用WhatsApp。
内容的提问来源于stack exchange,提问作者Buğra Aykan
相关产品推荐
相关产品推荐

