我正在开发一个Flutter应用程序,我需要向用户显示一个地方的导航。那么,我如何从我的Flutter应用程序中打开地图应用程序,就像我们在Android中使用外部意图一样?
或者他们有任何扑动插件吗?
答案 0 :(得分:20)
我建议您使用url_launcher dart包。
通过这种方式,您可以使用所有网址架构打开(sms
,maps
,甚至_openMap() async {
const url = 'https://www.google.com/maps/search/?api=1&query=52.32,4.917';
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}
,就像您的情况一样。)
要在Android和iOS中打开Google地图,您可以使用Hemanth Raj建议的general Android Maps URI schema。
_openMap() async {
// Android
const url = 'geo:52.32,4.917';
if (await canLaunch(url)) {
await launch(url);
} else {
// iOS
const url = 'http://maps.apple.com/?ll=52.32,4.917';
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}
}
如果您想在Android上做出选择,可以使用常规geo:
URI schema。
如果您想要专门打开的iOS Maps API,可以使用Cupertino Maps URI schema。
如果您选择区分Android和iOS(不使用适用于所有平台的Google Maps Api架构),您还必须在打开的地图调用中执行此操作:
import 'dart:io';
_openMap() async {
// Android
var url = 'geo:52.32,4.917';
if (Platform.isIOS) {
// iOS
url = 'http://maps.apple.com/?ll=52.32,4.917';
}
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}
或者您可以在运行时使用dart.io
library Platform
class检查操作系统:
_sendMail() async {
// Android and iOS
const uri = 'mailto:test@example.org?subject=Greetings&body=Hello%20World';
if (await canLaunch(uri)) {
await launch(uri);
} else {
throw 'Could not launch $uri';
}
}
_callMe() async {
// Android
const uri = 'tel:+1 222 060 888';
if (await canLaunch(uri)) {
await launch(uri);
} else {
// iOS
const uri = 'tel:001-22-060-888';
if (await canLaunch(uri)) {
await launch(uri);
} else {
throw 'Could not launch $uri';
}
}
}
_textMe() async {
// Android
const uri = 'sms:+39 349 060 888';
if (await canLaunch(uri)) {
await launch(uri);
} else {
// iOS
const uri = 'sms:0039-222-060-888';
if (await canLaunch(uri)) {
await launch(uri);
} else {
throw 'Could not launch $uri';
}
}
}
现在我完成了软件管理(真正的一个......不是一些代码重构...... ^^')我可以完成我的答案。
正如我在开头告诉你url_launcher你可以使用所有URI模式来调用,发送短信,发送电子邮件等。
这里有一些代码可以做到:
authority
即使URI架构应该是标准(RFC),有时它们的path
和import 'dart:io'
部分可能会在框架(Android或iOS)之间有所不同。
所以我在这里管理不同的操作系统有异常,但是你可以用dart.io
library Platform
class做得更好:
if (Platform.isAndroid) {
} else if (Platform.isIOS) {
}
然后在代码中:
first_key second_key
0 0 1
1 0 1
2 0 2
3 0 3
4 0 3
我建议你总是在两种环境中测试它们。
您可以在此处查看Android和iOS架构文档:
如果您想要类似于Android中的startActivity(但仅适用于Android平台),您可以使用dart包android_intent。
答案 1 :(得分:2)
您只需使用url_launcher
插件即可打开地图。它会在安装后启动地图,或者在浏览器上打开地图时启动地图。
示例:
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
void main() {
runApp(new Scaffold(
body: new Center(
child: new RaisedButton(
onPressed: _launchURL,
child: new Text('Launch Maps'),
),
),
));
}
_launchMaps() async {
const url = "https://www.google.com/maps/search/?api=1&query=LATITUDE,LONGITUDE,17&query_place_id=PLACE_ID";
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch Maps';
}
}
希望有所帮助!
答案 2 :(得分:0)
要在iOS上使用,不涉及浏览器,直接进入应用程序:
//waze
canLaunch("waze://")
launch("waze://?ll=${latitude},${longitude}&navigate=yes");
//gmaps
canLaunch("comgooglemaps://")
launch("comgooglemaps://?saddr=${latitude},${longitude}&directionsmode=driving")
您需要做的是添加到Info.plist:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>comgooglemaps</string>
<string>waze</string>
</array>
答案 3 :(得分:0)
在这种情况下,您只需要使用url_launcher插件即可打开您的应用。
yourMap() async {
const url = "https://www.google.com/maps/search/?
api=1&query=LATITUDE,LONGITUDE,17&query_place_id=PLACE_ID";
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch Maps';
}
}
,然后在onPress按钮上调用此yourMap()方法。
答案 4 :(得分:0)
我认为您正在寻找要从Flutter打开设备安装的应用程序的情况?
如果是这样,则可以使用名为device_apps的软件包。
此FLutter软件包还向您显示要显示的应用程序图标,您也可以按软件包名称打开应用程序。
只需浏览它提供的所有方法。我正在Flutter FItness应用中使用它来启动已安装的音乐播放器。