在 Objective-C 中从第三方应用程序中移交给 Apple Maps 应用程序

Posted

技术标签:

【中文标题】在 Objective-C 中从第三方应用程序中移交给 Apple Maps 应用程序【英文标题】:Handing off to Apple Maps Application from Within Third-Party App in Objective-C 【发布时间】:2014-11-20 12:07:41 【问题描述】:

有谁知道是否可以从第三方应用程序中调用 ios 8 设备上的本机 Apple Maps 应用程序并传入用户的Current Location(如果他们允许)以及目的地Latitude and Longitude允许地图应用程序绘制路线?

我有一个相对简单的应用程序,它显示了一个MKMapView,上面标有本地区域的各个位置。点击其中一个会显示一个注释,这反过来又允许向模态视图显示有关该场所的更多信息。我有一个“获取方向”选项,我想简单地捕获用户的位置并打开地图应用程序,其中包含从他们的位置计算到他们选择的场所的路线,而无需自己在这应用程序 - 没有处理 UI、错误、路由等的预算(只是认为如果它可以像移交给地图应用程序一样简单地完成,那将是一个很好的功能)。

任何帮助或建议表示赞赏。

【问题讨论】:

【参考方案1】:

是的,这很可能、简单且有据可查。看看 MKMapItem 类和方法openMapsWithItems:launchOptions: 方法。如果您正确设置选项,它将显示行车路线。

【讨论】:

【参考方案2】:

感谢@Duncan C 为我指明了正确的方向。您实际上可以使用 URL 方案调用地图应用程序并传入一些参数,但也可以通过 Duncan 给出的点数来实现。这是我最终得到的完整代码,可以完全按照我的要求进行操作。

// Check to see if we can use Maps app.
    // Pass an MKMapItem (destination) in along with Current Location
    // Specify what kind of directions we want (driving, Walking etc).
    // Invoke the Maps app.
    Class mapItemClass = [MKMapItem class];
    if (mapItemClass && [mapItemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)])
    
        // An MKMapItem which we will pass to Maps app.
        // I'm using properties from my Shop object.
        CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(_shop.coordinate.latitude, _shop.coordinate.longitude);
        MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:coordinate addressDictionary:nil];
        MKMapItem *mapItem = [[MKMapItem alloc] initWithPlacemark:placemark];
        [mapItem setName:[NSString stringWithFormat:@"Branch Name: %@", _shop.branch.name]];
        // Set the directions mode to "Driving"
        NSDictionary *launchOptions = @MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeDriving;
        // Get the "Current User Location" MKMapItem
        MKMapItem *currentLocationMapItem = [MKMapItem mapItemForCurrentLocation];
        // Pass the current location and destination map items to the Maps app
        [MKMapItem openMapsWithItems:@[currentLocationMapItem, mapItem] launchOptions:launchOptions];
    
    else
    
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Directions Error"
                                                        message:@"Sorry, we've encountered a problem meaning we're unable to provide you with directions at the moment.\n\nPlease use the Call Branch or Text Branch options to get in touch with a representative."
                                                       delegate:self
                                              cancelButtonTitle:@"Dmiss"
                                              otherButtonTitles:nil];
        [alert show];
    

【讨论】:

用于阅读文档和完成工作以及发布代码以造福他人的道具。 (已投票。)我担心我会得到“你能发布代码吗”(也就是为我做这项工作)对我的回答的回应。是的,您也可以使用 URL 方案来实现,但是 MKMapItem 更简洁并提供更多控制。 我从不要求邓肯的完整代码。没有任何好处;这一切都是为了找到正确的地方找到你需要的东西。只是需要你朝正确的方向轻推。再次感谢。

以上是关于在 Objective-C 中从第三方应用程序中移交给 Apple Maps 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

在 XCode 中从 Objective-C 访问 JavaScript 变量

我需要在 iOS 应用程序中从 SpriteKit GameViewController 转换为常规视图控制器(Objective-C)

在lua中从一个字符串中移除空间源码

如何在ios的objective-c中从设备中选择任何文档文件

尝试在objective-c中从objects[0]插入nil对象

无法在 Xcode 控制台中从 Objective-C 记录 Swift Singletons