Настройки открытого местоположения не работают в iOS 11

Я использую этот код для перенаправления в настройки iOS для местоположения:

NSURL *url = [NSURL URLWithString:@"App-Prefs:root=LOCATION_SERVICES"];

if ([[UIApplication sharedApplication] canOpenURL:url]) {
    [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
}

Но это просто перенаправление в настройки, а не в настройки местоположения или Bluetooth. Кто-нибудь знает, есть ли способ перенаправить на настройки местоположения iOS?

Спасибо


person EgzonArifi    schedule 26.03.2018    source источник
comment
теперь пользователь может переопределить наш requestAlwaysAuthorization и понизить его до requestWhenInUseAuthorization. Это означает, что как разработчик мы теперь должны предоставить оба описания в Info.plist, добавить новый ключ NSLocationAlwaysAndWhenInUseUsageDescription.   -  person Jevgenij Kononov    schedule 26.03.2018
comment
У меня это уже есть в моем файле Info.plist, но я думаю, что проблема в этом «App-Prefs: root = LOCATION_SERVICES».   -  person EgzonArifi    schedule 26.03.2018
comment
Вы проверили эту страницу: stackoverflow .com/questions/44424092/? это было полезно для меня ранее, когда я столкнулся с той же проблемой   -  person Jevgenij Kononov    schedule 26.03.2018


Ответы (3)


Объявите url как:

NSURL *url = [NSURL URLWithString:@"App-Prefs:root=LOCATION_SERVICES"];

таким образом:

if ([[UIApplication sharedApplication] canOpenURL:url]) {
    [[UIApplication sharedApplication] openURL: url];
}

ПРИМЕЧАНИЕ:

Описанный выше подход должен работать для iOS 10.x и ниже (вы можете проверить: Как программно открыть настройки WIFI в Objective-C на iOS 10). Однако схема URL app-prefs не поддерживается Apple! URL-адреса prefs считаются частными API, единственным задокументированным URL-адресом предпочтений является UIApplicationOpenSettingsURLString. Очевидно, что это не имеет никакого отношения к используемому языку программирования; Связанный:

Грубо говоря, на iOS 11 вы больше не сможете делать такую ​​навигацию.

person Ahmad F    schedule 26.03.2018
comment
Это выглядит так же, как с завершениемHandler, я думаю, что «App-Prefs: root = LOCATION_SERVICES» устарел в iOS 10 и выше, но я думаю, есть ли другой способ. - person EgzonArifi; 26.03.2018
comment
@EgzonArifi Итак, судя по моему ответу, попытка открыть URL-адрес приводит вас к настройкам, это правильно? - person Ahmad F; 26.03.2018
comment
Да, но при этом планировалось перенаправить в Настройки > Конфиденциальность > Службы геолокации. Спасибо - person EgzonArifi; 26.03.2018

Во-первых: нажмите на название проекта >> цель >> Информация >> Типы URL >> Схемы URL. Например, вы можете увидеть скриншот. введите здесь описание изображения

Затем используйте код:

-(IBAction)openSettingViewToEnableLocationService:(id)sender
{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=LOCATION_SERVICES"]];
}
person Mukesh    schedule 26.03.2018

Вы можете использовать UIApplicationOpenSettingsURLString. Если ваше приложение использует данные о местоположении или Bluetooth, вы увидите там настройки местоположения и Bluetooth.

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
person Andrew Romanov    schedule 26.03.2018