ios - 如何从 Xamarin iOS 中选择和打开可用的导航应用程序?
问题描述
我有以下代码可以通过我的内容页面中的一个按钮单击打开导航应用程序。
var location = new Location(Convert.ToDouble(jobItem.Latitude), Convert.ToDouble(jobItem.Longitude));
var options = new MapLaunchOptions { NavigationMode = NavigationMode.Driving };
await Map.OpenAsync(location, options);
我的安卓手机里有谷歌地图和位智,所以上面的代码确实显示了选择面板,让用户选择使用哪个应用程序没有问题。但是,当它遇到iOS时,即使iPhone中有3个导航应用程序,它也会直接打开Apple Maps而无需任何选择。我试图研究处理 iOS 上的默认导航应用程序设置,但不幸的是,iOS 没有提供任何单一选项来将应用程序设置为默认值,这与 android 不同。我还能做什么?
解决方案
您可以使用Xamarin.Essentials:Launcher NuGet 包。
您需要修改代码以使其看起来像下面的伪代码
var supportsWaze = await Launcher.CanOpenAsync("whateverTheWazeUriSchemeIs://");
var supportsGoogleMaps = await Launcher.CanOpenAsync("whateverTheUriSchemeIs://");
然后,您需要为用户提供某种 UI,以便他们根据这些布尔值是否为真来选择地图应用程序。我会使用ActionSheet
然后,您可以使用该await Launcher.OpenAsync
方法根据用户所做的任何选择打开正确的 URI。您也可以让他们选择记住这个选择以备后用。
iOS 不允许您覆盖操作系统默认应用程序,但在您自己的应用程序中,您可以选择其他应用程序的启动方式。Google 应用程序就是一个很好的例子。
推荐阅读
- c# - Novell Ldap:LdapSearchQueue 后续搜索中缺少 LdapSearchResult 消息类型
- kubernetes - 创建一个允许从 2 个特定 pod 访问 pod 的 NetworkPolicy
- c# - 使用 MVC 的实体框架代码优先:添加过滤功能 (OrderBy) 会破坏 ViewBag 上下文
- python - Python:在'_init_.pyi |_init_.pyi 中找不到引用'uic'
- excel - 查找最新文件并复制到另一个工作簿
- javascript - 如何在 javaScript 中编写我的 onclick 函数并将其绑定到 innerHTML
- asp.net - 无法解决“配置不存在...”错误
- python - 使用 Pandas 绘制树状可视化
- express - 如何将响应标头添加到 NextJS 公共资产?
- discord.js - 遇到问题 - 命令处理程序