it-swarm.com.ru

Позвоните в официальное приложение * Настройки * из моего приложения на iPhone

В какой-то момент в моем приложении я бы хотел перенаправить пользователя на официальное Настройки приложение. Если возможно, я также хочу перейти прямо в раздел Сеть в приложении Настройки .

Я думаю, что мне нужна схема URL-адреса приложения Settings и формат для создания моего запроса. Но я сомневаюсь, что называть такое официальное приложение запрещено.

Может кто-нибудь может мне помочь?

45
Di Wu

Плохие новости: как предложили @Hlung и @jasongregori, для iDevices с версией ОС> = iOS 5.1 && <iOS 8.0 еще разНЕТофициальный/документированный способ вызова встроенного Приложение настроек из стороннего приложения. Период.

15
Di Wu

Как отмечено в комментариях ниже, это больше невозможно в iOS версии 5.1 и после.

Если вы используете iOS 5.0, применимо следующее:

Теперь это возможно в iOS 5, используя схему URL 'prefs:'. Он работает с веб-страницы или из приложения.

пример URL:

prefs:root=General
prefs:root=General&path=Network

пример использования:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=General"]]
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=General&path=Network"]]
44
mattorb

Из IOS 8 вы можете вызвать настройки из приложения с помощью этого: 

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];

35
dynebuddha

Это также работает в версии iOS> 5.1, но вы должны добавить схемы URL в типах URL в XCode:

enter image description here

Тогда вы можете использовать 

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=WIFI"]];

Это может открыть настройки системы WiFi сейчас.

Другой путь можно найти в этом ответе: Настройки запуска iOS -> Схема URL ограничений .

17
Slemon

Вызов приложения настроек из другого приложения возможен только из iOS 8. Поэтому используйте следующий код

if([CLLocationManager locationServicesEnabled]&&
   [CLLocationManager authorizationStatus] != kCLAuthorizationStatusDenied)
{
  //...Location service is enabled
}
else
{
    if([[[UIDevice currentDevice] systemVersion] floatValue]<8.0)
    {
      UIAlertView* curr1=[[UIAlertView alloc] initWithTitle:@"This app does not have access to Location service" message:@"You can enable access in Settings->Privacy->Location->Location Services" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
      [curr1 show];
    }
    else
    {
       UIAlertView* curr2=[[UIAlertView alloc] initWithTitle:@"This app does not have access to Location service" message:@"You can enable access in Settings->Privacy->Location->Location Services" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:@"Settings", nil];
       curr2.tag=121;
       [curr2 show];
    }
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
   if (alertView.tag == 121 && buttonIndex == 1)
 {
  //code for opening settings app in iOS 8
   [[UIApplication sharedApplication] openURL:[NSURL  URLWithString:UIApplicationOpenSettingsURLString]];
 }
}
13
Teja Kumar Bethina

с iOS 8, вы можете перенаправить с

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];

наслаждайся кодированием

5
Mohit tomar

Для настроек в iOS 9 это работает для меня.

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=Settings"]];

Но убедитесь, что вы добавили схемы URL в типах URL в

Информация вкладка в целях приложения.

0
Narasimha Nallamsetty

Просто дополнительный ответ, который нужно добавить на адрес iOS8 +. Если вы поддерживаете что-то ниже 8, вы должны проверить, если это поддерживается

BOOL canGoToSettings = (UIApplicationOpenSettingsURLString != NULL);
if (canGoToSettings)
{
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
}
0
Chris

Для iOS 10 вы можете использовать:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"App-Prefs:root=Settings"]];

Он также работает на iOS 9!

0
Ivan Skrobot