2015-01-22 3 views
2

Я хочу получить широту и долготу пользователя и отобразить его на Apple Watch.Получение местоположения на Apple Watch

Я уже включил базовую структуру расположения в своем расширении Watchkit.

Когда я запускаю программу, все, что я получу за латы и долго 0,0 и 0,0

Я испытал тот же метод в классе на iPhone, и она работала, и дала мне соответствующие координаты. Что я делаю не так?

заголовочный файл:

#import <WatchKit/WatchKit.h> 
#import <Foundation/Foundation.h> 
#import <CoreLocation/CoreLocation.h> 

@interface InterfaceController : WKInterfaceController 

@end 

Файл .m:

#import "InterfaceController.h" 

@interface InterfaceController() 

@end 

@implementation InterfaceController 

- (void)awakeWithContext:(id)context { 
    [super awakeWithContext:context]; 

    // Configure interface objects here. 
} 

- (void)willActivate { 
    // This method is called when watch view controller is about to be visible to user 
    [super willActivate]; 

    self.locationManager = [[CLLocationManager alloc] init]; 
    self.locationManager.delegate = self; 
    if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) { 
     [self.locationManager requestWhenInUseAuthorization]; 
    } 

    [self.locationManager startUpdatingLocation]; 
} 

- (void)didDeactivate { 
    // This method is called when watch view controller is no longer visible 
    [super didDeactivate]; 
} 

- (IBAction)showLocation { 
    NSString * geoLoc = [NSString stringWithFormat:@"latitude: %f longitude: %f", self.locationManager.location.coordinate.latitude, self.locationManager.location.coordinate.longitude]; 
    NSLog(geoLoc); 
} 

@end 
+4

Что вы хотите сказать? – rmaddy

+0

Фактически вы не находите местоположение часов, так как у него нет GPS. Вы найдете местоположение парного телефона. Для этого вы используете стандартный код CLLocationManager. – Paulw11

+0

@ Paulw11, но я использую 'CLLocationManager' –

ответ

1

В Xcode, вы хотите использовать меню Debug для имитации местоположения, которое находится либо заранее установленный или использовать файл GPX в качестве источника местоположения.

+1

Я действительно сделал с опцией« Apple », и он все еще не работал. –

3

Прежде чем вы сможете получать любые обновления местоположения на расширение вашего часового пояса, вам необходимо будет разрешить обновления местоположения в вашем приложении для iPhone. Если у вас нет санкционированных обновлений местоположения в вашем приложении iPhone, расширение вашей чаты не получит никаких обновлений местоположения. Кроме того, я уверен, что вам нужно установить разрешение, чтобы всегда разрешать обновления местоположения [CLLocationManager requestAlwaysAuthorization]. Я не думаю, что это сработает, если вы используете [CLLocationManager requestWhenInUseAuthorization], хотя я не уверен на 100% о разрешениях.

+3

Это было верно в ранних версиях бета-версии, но в версии выпуска «Использовать в использовании» работает так, как ожидалось. – livings124

1

В документации CLLocationMananager, в location состояния собственности

Значение этого свойства nil если данные местоположения никогда не были получены.

Это значит, что для того, чтобы получить верность, обязательно нужно позвонить по телефону: [self.locationManager startUpdatingLocation]. Но есть вещи, которые вам нужно сделать, прежде чем это сработает.


Прежде всего, вам нужно будет запросить разрешение по телефону [self.locationManager requestAlwaysAuthorization].

Когда разрешение одобрено или отклонено, вызывается метод делегата locationManager:didChangeAuthorizationStatus:.

Если статус авторизации kCLAuthorizationStatusAuthorizedAlways, то вы можете позвонить по телефону [self.locationManager startUpdatingLocation].

После этого в любое время, когда местоположение будет обновлено, будет делегирован метод делегата locationManager:didUpdateLocations:, чтобы вы могли обновить свой интерфейс с новым местоположением.

1

Вы не должны запрашивать данные о местоположении в пределах расширения WatchKit.

От компании Apple Watch Руководства Human Interface:

«Избегайте использования технологий, которые запрашивают разрешение пользователя, как ядра Местоположение.Использование технологии с вашего расширения WatchKit может привести к отображению неожиданного приглашения на iPhone пользователя в начале времени, когда вы сделаете запрос. Хуже того, это может произойти в то время, когда iPhone находится в кармане пользователя и не видно.»

0

Я использую этот код

locationManager = [[CLLocationManager alloc] init]; 
locationManager.delegate = self; 
[locationManager setDesiredAccuracy:kCLLocationAccuracyBest]; 
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8) 
{ 
    [locationManager requestAlwaysAuthorization]; 
    [locationManager requestWhenInUseAuthorization]; 

} 

[locationManager startUpdatingLocation]; 

и для отображения в wkinterfaceMap я использовать этот код

CLLocationCoordinate2D mapLocation = CLLocationCoordinate2DMake([latitude floatValue],[longitude floatValue]); 
// 
    MKCoordinateSpan coordinateSpan = MKCoordinateSpanMake(1, 1); 

    [self.mapkit addAnnotation:mapLocation withPinColor: WKInterfaceMapPinColorPurple]; 


[self.mapkit setRegion:(MKCoordinateRegionMake(mapLocation, coordinateSpan))];