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

Flutter调用url_launcher启动外部应用后出现崩溃失联问题

Flutter调用url_launcher打开谷歌地图后返回应用崩溃(Lost connection to device)

问题重现

  • 使用url_launcher执行以下代码打开谷歌地图:
await launchUrl(Uri.parse("https://maps.google.com"));
  • 谷歌地图能正常打开,但返回Flutter应用时,应用卡在闪屏界面无响应,Android Studio提示Lost connection to device.
  • 生命周期监听输出日志:
[log] Screen state changed to: AppLifecycleState.inactive
[log] Screen state changed to: AppLifecycleState.hidden
[log] Screen state changed to: AppLifecycleState.paused
Lost connection to device.
  • 环境:Android Studio Ladybug 2024.2.1,USB连接的Android 10物理设备,flutter doctor检测无异常

可能的解决方法

1. 改用谷歌地图原生Scheme而非HTTPS链接

直接调用HTTPS链接可能触发应用切换时的系统异常,换成谷歌地图专属Scheme:

// 优先打开谷歌地图应用,无应用则跳转网页
await launchUrl(
  Uri.parse("geo:0,0?q=Google+Maps"),
  mode: LaunchMode.externalApplication,
);

// 或者直接指定谷歌地图包名启动
await launchUrl(
  Uri.parse("com.google.android.apps.maps://"),
  mode: LaunchMode.externalApplication,
);

2. 修正生命周期回调的异步问题

didChangeAppLifecycleState是同步回调,不能用async修饰,否则会干扰生命周期流程:

@override
void didChangeAppLifecycleState(AppLifecycleState state) {
  log('Screen state changed to: $state');
  // 异步逻辑单独抽离到函数中
  if (state == AppLifecycleState.resumed) {
    _handleAppResume();
  }
}

void _handleAppResume() async {
  // 这里写恢复后的异步操作
}

3. 检查AndroidManifest.xml配置

确保url_launcher所需配置正确:

  • 添加网络权限(需要网页跳转时):
<uses-permission android:name="android.permission.INTERNET" />
  • 确认启动Activity的启动模式无异常,避免多实例冲突:
<activity
    android:name=".MainActivity"
    android:exported="true"
    android:launchMode="singleTop"
    android:theme="@style/LaunchTheme">
    <!-- 其他原有配置 -->
</activity>

4. 调整设备USB调试设置

  • 关闭Android 10设备的「USB调试安全设置」
  • 重新插拔USB,重启Android Studio调试进程
  • 开启设备「保持唤醒」选项,防止调试时设备休眠断开连接

5. 更新依赖与Flutter版本

执行命令更新相关组件:

flutter pub upgrade url_launcher
flutter upgrade

内容的提问来源于stack exchange,提问作者Ted Nyberg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:07:06