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

