簡體   English   中英

iOS:跟蹤用戶位置

[英]iOS: Track user location

我在許多應用程序中使用過位置服務,但這個新應用程序在iOS 8.0及更高版本上存在問題。 我沒有收到應用程序首次加載提示允許位置服務的通知。 但是,在我的iOS 7.1設備上,我收到提示。

這是我在didFinishLaunchingWithOptions中的appDelegate中的內容:

self.locationManager = [CLLocationManager new];
[self.locationManager setDelegate:self];
if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
    [self.locationManager requestAlwaysAuthorization];
}

[self initializeRegionMonitoring];

而initializeRegionMonitoring方法是:

-(void) initializeRegionMonitoring {

NSLog(@"initialize region monitoring");

self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;

// radius of region being monitored
CLLocationDistance radius = 25; // 20 metre sensitivity
CLLocationCoordinate2D coordinate;
coordinate.latitude = 25.886099;
coordinate.longitude = -80.165124;

self.someRegion = [[CLCircularRegion alloc] initWithCenter:coordinate radius:radius identifier:@"Qualex"];
self.someRegion.notifyOnEntry = YES;
self.someRegion.notifyOnExit = YES;
[self.locationManager startMonitoringForRegion:self.someRegion];

// notify changes when the device has moved x meters
self.locationManager.distanceFilter = 20; // or set to 20 meters
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
self.locationManager.activityType = CLActivityTypeAutomotiveNavigation;
[self.locationManager startUpdatingLocation];
[self.locationManager startMonitoringSignificantLocationChanges];
}

我也在我的info.plist中設置了NSLocationAlwaysUsageDescription,所以必須有我忘記的東西,對吧? 謝謝您的幫助!

編輯:

我也在同時注冊遠程通知,這在以前從來都不是問題,但我認為這可能是一些有用的額外信息。

此外,當終止應用程序然后重新運行通知以允許位置服務彈出,但立即消失。 只是在屏幕上閃爍。 我不知道為什么沒有點擊警報上的其中一個選項就會解雇。

在iOS 8之前,您只需通過實例化CLLocationManager對象並嘗試啟動位置跟蹤來請求位置權限。 在iOS 8及更高版本中,這不會顯示權限提示; 您必須使用requestAlwaysAuthorizationrequestWhenInUseAuthorization方法手動請求授權。

話雖如此,在iOS 8上,如果您調用其中任何一種方法,那么釋放您調用它的CLLocationManager實例,位置權限提示將自行解除。 這里發生的是您正在創建位置管理器,請求權限(iOS開始嘗試呈現權限對話框),調用initializeRegionMonitoring ,以及將self.locationManager屬性設置為新的位置管理器實例。 這會導致您創建的第一個被ARC釋放,因此在有機會出現之前,權限提示會被取消。

刪除行self.locationManager = [[CLLocationManager alloc] init]; 在您的initializeRegionMonitoring方法應該解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM