如何从Flutter应用程序打开应用程序?

时间:2018-03-18 07:44:41

标签: flutter

我正在开发一个Flutter应用程序,我需要向用户显示一个地方的导航。那么,我如何从我的Flutter应用程序中打开地图应用程序,就像我们在Android中使用外部意图一样?

或者他们有任何扑动插件吗?

5 个答案:

答案 0 :(得分:20)

我建议您使用url_launcher dart包。

通过这种方式,您可以使用所有网址架构打开(smsmaps,甚至_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中打开Goog​​le地图,您可以使用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),有时它们的pathimport '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应用中使用它来启动已安装的音乐播放器。

https://pub.dev/packages/device_apps