【问题标题】:How can I natively launch an external app from within Xamarin.Forms?如何从 Xamarin.Forms 中本地启动外部应用程序?
【发布时间】:2016-04-11 03:53:08
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    使用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);
    

    【讨论】:

      【解决方案2】:

      从 Xamarin.Forms v4.3.0.908675(可能是 v4.3.0)开始,Device.OpenUri 已弃用,您应该改用 Xamarin.Essentials 中的 Launcher.TryOpenAsync。虽然你会觉得很麻烦,至少我是这样。

      【讨论】:

        【解决方案3】:

        使用下面的代码,并添加命名空间Xamarin.Essentials 和Xamarin.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");
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-07-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多