Android端如何打开Google Maps应用而非在Webview中打开?
如何在Android设备上直接打开Google Maps应用而非WebView?
我希望在Android设备中打开Google Maps应用,当前使用如下代码实现:
Future<void> openMapApp() async { String query = Uri.encodeComponent(adress); String googleUrl = 'https://www.google.com/maps/search/?api=1&query=$query'; if (Platform.isAndroid) { try { if (await canLaunchUrl(Uri.parse(googleUrl))) { await launchUrl(Uri.parse(googleUrl)); } } catch (error, stack) { await Sentry.captureException(error, stackTrace: stack); throw ("Cannot launch Google map"); } } }但该代码会在Webview中打开页面。我明确希望打开Google Maps应用,且设备已安装该应用,请问是否可行?
解决方案
可行,你需要使用Google Maps的应用内协议链接而非Web链接,Android系统会优先唤起已安装的Google Maps应用。
修改后的代码
Future<void> openMapApp() async { String query = Uri.encodeComponent(adress); // Google Maps应用专属协议链接 String googleMapsAppUrl = 'geo:0,0?q=$query'; // 备用Web链接(应用未安装时降级使用) String googleWebUrl = 'https://www.google.com/maps/search/?api=1&query=$query'; if (Platform.isAndroid) { try { // 尝试唤起Google Maps应用 if (await canLaunchUrl(Uri.parse(googleMapsAppUrl))) { await launchUrl( Uri.parse(googleMapsAppUrl), // 强制启动外部应用,避免WebView打开 mode: LaunchMode.externalApplication, ); } else { // 应用未安装时打开Web页面 await launchUrl(Uri.parse(googleWebUrl)); } } catch (error, stack) { await Sentry.captureException(error, stackTrace: stack); throw ("Cannot launch Google map"); } } }
关键修改说明
- 使用
geo:协议:这是Google Maps应用识别的专属协议,系统会直接唤起对应应用 - 设置
LaunchMode.externalApplication:明确要求启动外部独立应用,避免在应用内WebView或浏览器打开 - 保留Web链接降级方案:确保在Google Maps未安装的场景下,仍能正常打开地图页面
内容的提问来源于stack exchange,提问作者Karol Wiśniewski
相关产品推荐
相关产品推荐

