iPhone - отобразить диалоговое окно «местоположение должно быть доступно» - PullRequest
1 голос
/ 03 сентября 2011

Тестирование на устройстве (Iphone 4, IOS 4.2.1), когда вы используете MapKit / CLLocationManager, появляется стандартный диалог, в котором пользователю предлагается включить настройки местоположения и предложить кнопку для перехода к этим настройкам.

Если вы нажмете «ОК», то это диалоговое окно больше никогда не появится?

Как сделать так, чтобы оно снова появилось программно, чтобы помочь пользователю получить правильное представление настроек через это диалоговое окно?

1 Ответ

7 голосов
/ 03 сентября 2011

Что ж, невозможно программно вызвать стандартный диалог с просьбой разрешить вашему приложению использовать службы определения местоположения.Все это делается с помощью iOS.

Однако вы всегда можете попробовать запустить обновление местоположения с помощью метода startUpdatingLocation на экземпляре CLLocationManager.Если службы определения местоположения отключены, вы будете уведомлены делегатом о состоянии ошибки, а затем сможете открыть диалоговое окно с просьбой перейти в «Настройки» и включить службы определения местоположения для вашего приложения ... См. Ниже код для фильтрации kCLErrorDenied.

#pragma mark - CLLocationManagerDelegate
- (void)locationManager:(CLLocationManager *)inManager didFailWithError:(NSError *)inError{
    if (inError.code ==  kCLErrorDenied) {
        NSLog(@"Location manager denied access - kCLErrorDenied");
        // your code to show UIAlertView telling user to re-enable location services
        // for your app so they can benefit from extra functionality offered by app
    }
}

Обратите внимание, что вы не можете запустить приложение Настройки через URL-схему из вашего приложения.

ОБНОВЛЕНИЕ: начиная с iOS5.1, вы не можете не используйте следующий метод.

ОБНОВЛЕНИЕ: начиная с iOS5, вы можете запустить Настройки из своего приложения:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs://"]];
...