我该怎么办? 我的iPhone应用程序中有一个按钮,用户点击该按钮即可启动GPS导航。单击按钮时我所做的就是获取它们的位置,并将其传递给谷歌地图以完成其余的工作。
然而,只要我登上按钮所在的屏幕,应用程序就会问我标准的“此应用程序想要使用您当前的位置”。但是我不希望一旦我登陆屏幕就会被问到这个问题。相反,应该询问何时单击按钮。
以下是我在视图.m文件中处理方案的方法:
- (void)viewDidLoad
{
self.locationManager = [[CLLocationManager alloc] init];
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.delegate = self;
[locationManager startUpdatingLocation];
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
然后单击按钮。还试图将viewDidLoad中的代码放在这里,从注释掉的部分可以看出。这是因为我在视图加载时不会被问到这个问题,但是一旦按下按钮,GPS就无法工作。我在应用程序屏幕上收到一条错误消息,说“应用程序无法建立到最近的道路的路线”。并且“此应用程序想要访问您当前的位置”仅在屏幕上短暂闪烁。
- (IBAction)gpsNavigation:(id)sender
{
/*
self.locationManager = [[CLLocationManager alloc] init];
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.delegate = self;
[locationManager startUpdatingLocation];
*/
NSString *destAddress = @"52.269444, -9.708674";
NSString *url = [NSString stringWithFormat: @"http://maps.apple.com/maps?saddr=%f%f&daddr=%@",
locationManager.location.coordinate.latitude,
locationManager.location.coordinate.longitude,
[destAddress stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
}
答案 0 :(得分:2)
请在gpsNavigation:method中使用注释代码。 您的问题是,只要调用[locationManager startUpdatingLocation],就会获得locationManager.location。 所以你的代码可以如下。
- (IBAction)gpsNavigation:(id)sender
{
self.locationManager = [[CLLocationManager alloc] init];
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.delegate = self;
[locationManager startUpdatingLocation];
}
- (void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
NSString *destAddress = @"52.269444, -9.708674";
NSString *url = [NSString stringWithFormat: @"http://maps.apple.com/maps?saddr=%f%f&daddr=%@",
locationManager.location.coordinate.latitude,
locationManager.location.coordinate.longitude,
[destAddress stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
[locationManager stopUpdatingLocation];
}
答案 1 :(得分:1)
只要您拨打[locationManager startUpdatingLocation]
您的应用请求位置,就会要求用户获得许可。所以延迟这个电话,直到你需要它(按下按钮)