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

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参数分隔符

代码中的&amp;是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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:24:27