如何在Xamarin.Forms中本地启动外部应用程序?

时间:2016-01-06 21:58:13

标签: c# xamarin cross-platform xamarin.forms

正如问题标题所示,我正在寻找一种从 Xamarin.Forms 应用中启动外部应用的方法。例如,我的应用程序有一个地址列表,当用户点击其中一个地址时,将打开当前平台的内置地图应用程序(Google Maps for Android,Apple Maps for iOS)。如果重要,我只针对Android和iOS。

我当然可以使用依赖服务并在每个平台的基础上编写应用程序启动代码,但我更愿意,如果我只需要编写一次。是否有一种本地方式在Xamarin.Forms中执行此操作?我无法在Xamarin网站或论坛上找到任何正式记录的内容。

3 个答案:

答案 0 :(得分:9)

使用Device.OpenUri并将相应的URI与Device.OnPlatform结合使用,以格式化每个平台的URI

string url; 

Device.OnPlatform(iOS: () =>
  {
     url = String.Format("http://maps.apple.com/maps?q={0}", address);
  },
  Android: () =>
  {
    url = String.Format("http://maps.google.com/maps?q={0}", address);
  });

Device.OpenUri(url);

答案 1 :(得分:0)

从Xamarin.Forms v4.3.0.908675(可能是v4.3.0)开始,Device.OpenUri已过时,您应该使用Xamarin.Essentials中的Launcher.TryOpenAsync。尽管您会发现麻烦,或者至少是我。

答案 2 :(得分:0)

使用下面的代码,并添加命名空间 Xamarin.EssentialsXamarin.Forms

if (Device.RuntimePlatform == Device.iOS)
{
    // https://developer.apple.com/library/ios/featuredarticles/iPhoneURLScheme_Reference/MapLinks/MapLinks.html
    await Launcher.OpenAsync("http://maps.apple.com/?daddr=San+Francisco,+CA&saddr=cupertino");
}
else if (Device.RuntimePlatform == Device.Android)
{
    // opens the 'task chooser' so the user can pick Maps, Chrome or other mapping app
    await Launcher.OpenAsync("http://maps.google.com/?daddr=San+Francisco,+CA&saddr=Mountain+View");
}
else if (Device.RuntimePlatform == Device.UWP)
{
    await Launcher.OpenAsync("bingmaps:?rtp=adr.394 Pacific Ave San Francisco CA~adr.One Microsoft Way Redmond WA 98052");
}