如何在Flutter中正确调用Waze?解决url_launcher调用失败问题
Flutter调用Waze应用的正确配置与URL格式
错误原因说明
提示“component name for ... is null”通常是因为系统无法识别Waze的URL Scheme,或者App未配置对应的权限,导致无法定位到Waze应用。
正确的Waze URL格式
地址导航/定位:
waze://?q=地址编码&navigate=yes示例(你的目标地址):
waze://?q=Calea%20Rahovei%20276,%20Sector%201,%20București&navigate=yes若仅需展示位置而非导航,可去掉
&navigate=yes。坐标导航/定位:
waze://?ll=纬度,经度&navigate=yes示例:
waze://?ll=37.774929,-122.419416&navigate=yes同样,去掉
&navigate=yes可仅展示该坐标位置。
必须的平台配置
Android
在android/app/src/main/AndroidManifest.xml的<activity>标签内添加intent-filter,让系统识别Waze的Scheme:
<intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="waze" /> </intent-filter>
iOS
在ios/Runner/Info.plist中添加LSApplicationQueriesSchemes数组,允许App查询Waze的Scheme:
<key>LSApplicationQueriesSchemes</key> <array> <string>waze</string> </array>
调用代码示例
确保使用最新版url_launcher插件,调用前先检查是否可打开:
import 'package:url_launcher/url_launcher.dart'; Future<void> openWazeLocation() async { // 选择地址或坐标URL final wazeUrl = 'waze://?q=Calea%20Rahovei%20276,%20Sector%201,%20București&navigate=yes'; // final wazeUrl = 'waze://?ll=37.774929,-122.419416&navigate=yes'; final uri = Uri.parse(wazeUrl); if (await canLaunchUrl(uri)) { await launchUrl(uri); } else { throw '无法打开Waze应用,请确认已安装'; } }
内容的提问来源于stack exchange,提问作者behnam
相关产品推荐
相关产品推荐

