[英]How to handle Enable Location Services after a user selects allow?
基本上,當我的應用程序首次啟動時,會出現“啟用位置服務”提示。 當用戶點擊允許時,我想開始更新用戶位置並放大該區域。
在viewDidLoad中,我啟動了位置管理器,但不幸的是,在用戶有機會點擊“允許”之前,視圖已加載。 在應用程序第二次啟動時一切正常,因為用戶已經允許了位置服務
我的問題是如何捕獲點擊允許的事件,以便我可以運行代碼來放大區域?
我已經嘗試過使用-(void)locationManager:didChangeAuthorizationStatus:
但是當用戶點擊允許時,它似乎並未調用此委托方法。
希望這對我來說是個新手。
據我所知,您不能,但不必捕獲此事件,因為在獲取該位置的坐標之前,您將無法縮放到特定位置。 您的應用在第二次啟動時運行良好,因為它從第一次啟動就使用了緩存的位置數據。 因此,您需要的是在收到新的有效坐標后運行縮放代碼。 如果您使用CLLocationManager,那么請看
– locationManager:didUpdateToLocation:fromLocation:
在它的代表。 如果用戶拒絕使用位置服務,則您的代表將收到
locationManager:didFailWithError:
有相應的錯誤。
如果使用MKMapKit,則比在MKMapView中委托實現方法
– mapViewWillStartLocatingUser:
專注於當前用戶位置。 處理拒絕工具
– mapView:didFailToLocateUserWithError:
鏈接到相應的Apple文檔:
在這里工作正常。 我啟動位置管理器,然后設置它的代表並啟動它。 當出現允許彈出的窗口時,將調用-(void)locationManager:didChangeAuthorizationStatus:
CLAuthorizationStatus
等於kCLAuthorizationStatusNotDetermined
。 如果我點擊“不允許”,它將再次調用CLAuthorizationStatus
等於kCLAuthorizationStatusDenied
。 輕按“允許”時,將使用CLAuthorizationStatus
等於kCLAuthorizationStatusAuthorized
進行kCLAuthorizationStatusAuthorized
。 檢查您的代表設置是否正確。
您可以這樣處理:
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
switch([CLLocationManager authorizationStatus])
{
case kCLAuthorizationStatusAuthorized:
NSLog(@"Location services authorised by user");
break;
case kCLAuthorizationStatusDenied:
NSLog(@"Location services denied by user");
break;
case kCLAuthorizationStatusRestricted:
NSLog(@"Parental controls restrict location services");
break;
case kCLAuthorizationStatusNotDetermined:
NSLog(@"Unable to determine, possibly not available");
break;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.