簡體   English   中英

用戶選擇允許后如何處理啟用位置服務?

[英]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文檔:

CLLocationManager

CLLocationManagerDelegate

MKMapViewDelegate

在這里工作正常。 我啟動位置管理器,然后設置它的代表並啟動它。 當出現允許彈出的窗口時,將調用-(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.

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