Otwieranie aplikacji Ustawienia z innej aplikacji


180

Okej, wiem, że jest wiele pytań na ten temat, ale wszystkie pochodzą z dawnych czasów.

Więc. Wiem, że jest to możliwe, ponieważ robi to aplikacja Map.

Jeśli wyłączę lokalizację tej aplikacji, w aplikacji Map wyśle ​​mi wiadomość, a jeśli w porządku, naciśniesz „Aplikacja ustawień”. Moje pytanie brzmi: jak to możliwe? Jak mogę otworzyć aplikację „Setting” z własnej aplikacji?

Zasadniczo muszę zrobić to samo, jeśli użytkownik wyłączy lokalizację mojej aplikacji, wtedy pokażę mu komunikat mówiący coś, co otworzy „Ustawienie aplikacji”



1
Możesz otworzyć aplikację ustawień programowo w iOS8 (ale nie w niższych wersjach iOS) .kod poniżej w odpowiedziach.
Karan Dua

Odpowiedzi:


291

Jak wspomniano Karan Dua, jest to teraz możliwe w iOS8 przy użyciu UIApplicationOpenSettingsURLStringpatrz dokumentacja Apple .

Przykład:

Szybki 4.2

UIApplication.shared.open(URL(string: UIApplication.openSettingsURLString)!)

W Swift 3:

UIApplication.shared.open(URL(string:UIApplicationOpenSettingsURLString)!)

W Swift 2:

UIApplication.sharedApplication().openURL(NSURL(string:UIApplicationOpenSettingsURLString)!)

W celu C

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

Przed iOS 8:

Nie możesz. Jak już powiedziałeś, było to wielokrotnie omawiane i wyskakujące okienko z prośbą o włączenie usług lokalizacyjnych jest dostarczane przez Apple, a nie przez samą aplikację. Dlatego jest w stanie otworzyć aplikację ustawień.

Oto kilka powiązanych pytań i artykułów:

czy można otworzyć aplikację Ustawienia za pomocą openURL?

Programowe otwieranie aplikacji ustawień (iPhone)

Jak mogę otworzyć aplikację Ustawienia, gdy użytkownik naciśnie przycisk?

iPhone: otwieranie panelu preferencji aplikacji z aplikacji

Otwórz UIPickerView, klikając pozycję w preferencjach aplikacji - jak to zrobić?

Czy otworzyć aplikację Ustawienia?

iOS: źle robisz ustawienia


Jeśli potrzebujesz bardziej wiarygodnej odpowiedzi, możesz spróbować zapytać na forach Apple Developer < developer.apple.com/devforums > lub zgłosić błąd na stronie < developer.apple.com/bugreporter > - jeśli jest to znany problem, powinien wrócić ponieważ „zachowuje się poprawnie” lub duplikat oryginalnego błędu.
Vincent Gable,


2
Jest to teraz możliwe w iOS 8 przy użyciu [NSURL URLWithString: UIApplicationOpenSettingsURLString]
LightningStryk

1
w swift 3 - UIApplication.shared.openURL (URL (ciąg znaków: UIApplicationOpenSettingsURLString)!)
GMHSJ

1
Uważaj na tę metodę. Użyłem go i kilka miesięcy później moja aplikacja została odrzucona z następującą wiadomością od Apple: Twoja aplikacja korzysta z niepublicznego schematu URL „prefs: root =”, który jest podmiotem prywatnym. Korzystanie z niepublicznych interfejsów API jest niedozwolone w App Store, ponieważ może to prowadzić do pogorszenia komfortu użytkowania w przypadku zmiany tych interfejsów API. Dalsze korzystanie lub ukrywanie niepublicznych interfejsów API w przyszłych przesłaniach tej aplikacji może spowodować zamknięcie konta Apple Developer, a także usunięcie wszystkich powiązanych aplikacji z App Store.
Nick Kirsten

133

Od @Yatheeshaless „s odpowiedź :

Możesz otworzyć aplikację ustawień programowo w iOS8, ale nie we wcześniejszych wersjach iOS.

Szybki:

   UIApplication.sharedApplication().openURL(NSURL(string:UIApplicationOpenSettingsURLString)!)

Swift 4:

if let url = NSURL(string: UIApplicationOpenSettingsURLString) as URL? {
    UIApplication.shared.openURL(url)
}

Swift 4.2 (BETA):

if let url = NSURL(string: UIApplication.openSettingsURLString) as URL? {
    UIApplication.shared.open(url, options: [:], completionHandler: nil)
}

Cel C:

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

23
Wygląda na to, aby otworzyć sekcję aplikacji w aplikacji Ustawienia. Użytkownicy będą musieli kilka razy nacisnąć Wstecz, aby zobaczyć główny ekran Ustawień.
wjl

1
Mała korekta ..[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
Paito,

10
@Paito Powyższa linia prowadzi do ustawień prywatnych aplikacji . Czy jest jakiś sposób na przejście do sekcji prywatności ustawień urządzenia? Proszę o komentarz, jeśli wiesz. To przekierowanie jest możliwe, ponieważ znalazłem je w aplikacji mapy, gdzie przekierowuje do ustawień lokalizacji w sekcji prywatności.
Pavan Kotesh

1
Mała szybka korekta: UIApplication.sharedApplication (). OpenURL (NSURL (ciąg: UIApplicationOpenSettingsURLString)!)
vbezhenar 11.11.14

1
@ PavanKotesh - Tak, ale ustawienia aplikacji będą miały to, czego potrzebujesz pozwolenie, w moim przypadku potrzebowałem dostępu do kontaktów, które pojawiają się w ustawieniach aplikacji z powyższym kodem.
Tejas K

58

TAK!! możesz uruchomić ekran Ustawienia urządzenia, przetestowałem na iOS 9.2

Krok 1. Musimy dodać schematy URL

Przejdź do Ustawienia projektu -> Informacje -> Typy adresów URL -> Dodaj nowe schematy adresów URL

wprowadź opis zdjęcia tutaj

Krok 2. Uruchom programowo ustawienia Dzięki @davidcann

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

Możemy także uruchamiać pod-ekrany, takie jak Muzyka, Lokalizacja itp., Po prostu używając właściwej nazwy

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

Zobacz pełną listę nazwisk tutaj udostępnioną przez Henri Normaka


Aktualizacja:

Zgodnie z komentarzem każdy chce wiedzieć, co stanie się po tej zmianie statusu mojego zgłoszenia?

Więc YES!! I got successful update submission and application is available on store without any complain.

Aby potwierdzić, właśnie pobrałem dziś rano i wyłączyłem usługi lokalizacyjne, a następnie uruchomiłem aplikację, która poprosiła mnie o pozwolenie na lokalizację, a następnie wyskoczyło moje powiadomienie, aby wysłać mnie w ustawieniach -> strona usług lokalizacyjnych -> Włączone -> Otóż ​​to!!

! [UWAGA: Twoja aplikacja może zostać odrzucona ... nawet jeśli zostanie zatwierdzona, może zostać odrzucona w przyszłej wersji, jeśli użyjesz tej metody ...] 4


Dzięki, działa dla mnie również na iOS 6 i 7. Czy próbowałeś już przejść przez proces recenzji Apple?
Flo,

1
@ Flo dam ci znać, ponieważ obecnie naciskałem na testy wersji beta.
swiftBoy,

1
iOS 9.3. Działa jak urok. Widzę nawet „Powrót do [nazwa mojej aplikacji]” w aplikacji ustawień. Z pewnością jest to obsługiwane, ponieważ widzę wiele innych aplikacji, które robią takie rzeczy!
EricWasTaken

13
W systemie iOS 10 nowym adresem URL nie jest „prefs: root = ....”, ale „App-Prefs: root = ...”.
Drico

1
Twoja aplikacja może zostać odrzucona ... nawet jeśli zostanie zatwierdzona, może zostać odrzucona w przyszłej wersji, jeśli użyjesz tej metody ...
Mihir Mehta

18

Możesz użyć tego na iOS 5.0 i nowszych: To już nie działa.

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

3
@MarkGranoff Nie, wydaje się technicznie nieudokumentowany, ale nie jest tak zły jak normalny nieudokumentowany interfejs API, ponieważ jest to po prostu schemat URL. Możesz to sprawdzić za pomocą canOpenURL: najpierw. Jest też wątek na ten temat: devforums.apple.com/message/543818
davidcann

3
Możesz przejść do różnych obszarów w ustawieniach zgodnie z tym artykułem . Na przykład ten adres URL przeniesie Cię do ustawień Bluetoothprefs:root=General&path=Bluetooth
program

1
Otrzymałem aplikację odrzuconą za używanie prywatnego API, ponieważ otwierałem adres URL: @ „prefs: root = Brightness”. Zwykle nieudokumentowane oznacza prywatne.
Guillaume,

4
Apple stwierdził, że nie był to publiczny interfejs API i nie jest już obsługiwany. W tej sprawie zgłoszono błąd, numer 11253669.
Don Wilson

2
Właśnie zobaczyłem, że działa to w aplikacji Strava. Wyłącz Bluetooth, a następnie włącz go w aplikacji. Następnie prosi o przejście do aplikacji ustawień i przechodzi bezpośrednio do ustawień Bluetooth. To jest dla iOS 5.1. Czy istnieje sposób, aby dowiedzieć się, jakiego schematu używają?
Ants

14

Aktualizacja iOS 10

Apple zmieniło metodę otwierania asynchronizacji w głównym wątku. Jednak od teraz możliwe jest otwieranie ustawień aplikacji tylko w ustawieniach natywnych.

[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];

Aktualizacja iOS 9

Teraz można przejść bezpośrednio do menu pod-ustawień. Jednak należy utworzyć schemat adresów URL. Można to zrobić na dwa sposoby:

  1. XCode - Znajdziesz go w Docelowym, Informacyjnym, Schemacie URL. Następnie wpisz prefs.
  2. Bezpośrednie dodawanie do * -Info.plist. Dodaj następujące: <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleTypeRole</key> <string>Editor</string> <key>CFBundleURLSchemes</key> <array> <string>prefs</string> </array> </dict> </array>

Następnie kod:

Szybki

UIApplication.sharedApplication().openURL(NSURL(string:"prefs:root=General&path=Keyboard")!)

Cel C

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=General&path=Keyboard"]];


1
Wypróbowałem rozwiązanie iOS 10.x i nie działało ono dla mnie - nic się nie dzieje.
Mark Peters,

@MarkPeters, czy wymyśliłeś już sposób? To może być bardzo pomocne. Dzięki.
Roohul Poolak

Nie, nie mam. Nadal nie wiem, czy to błąd iOS, czy Apple właśnie usunął tę funkcję.
Mark Peters

Myślę, że nadal działają z rozszerzeniami. Ex aplikacja znajduje się Magic Launcherw Appstore.
Trident

4

W Swift 3 / iOS 10+ wygląda to teraz

if let url = URL(string: "App-Prefs:root=LOCATION_SERVICES") {
    UIApplication.shared.open(url, completionHandler: .none)
}

jak dostać się do ekranu powiadomień? ponieważ jeśli niech url = URL (ciąg: „Prefiksy aplikacji: root = ID_IDIFICATIONS & path = io.artup.artup”) {if #available (iOS 10.0, *) {UIApplication.shared.open (url, completeHandler: .none)} }, ale poszedłem powiadomić w telefonie iPhone 6, a nie w telefonie iPhone 7 plus?
user3804063,

3
Spowoduje to odrzucenie Twojej aplikacji. Wykorzystują prywatny interfejs API.
Bersaelor,

Odrzuciłem moją aplikację, używając tego „App-Prefs: root”
Malder,

1
Podkreśl tylko to, o czym wspominają inni, nie używaj tej metody, spowoduje to odrzucenie Twojej aplikacji. Wielokrotne przesyłanie aplikacji w taki sposób spowoduje zamknięcie konta programisty.
CodeBrew

4

Swift 3:

guard let url = URL(string: UIApplicationOpenSettingsURLString) else {return}
if #available(iOS 10.0, *) {
  UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
  // Fallback on earlier versions
  UIApplication.shared.openURL(url)
}

4

Wygląda na to, że możesz użyć prefs:<area> adresu URL, aby otworzyć ustawienia i przejść do określonych obszarów. Apple może to zmienić i zepsuć aplikację, więc zawsze sprawdź, czy możesz je najpierw otworzyć.

Z tego artykułu wymienili niektóre z nich dla iOS 13.1:

Adresy URL ustawień

iCloud

  • iCloud: prefs:root=CASTLE
  • iCloud Backup: prefs:root=CASTLE&path=BACKUP

Radia bezprzewodowe

  • Wi-Fi: prefs:root=WIFI
  • Bluetooth: prefs:root=Bluetooth
  • Komórkowy: prefs:root=MOBILE_DATA_SETTINGS_ID

Osobisty punkt dostępu

  • Osobisty hotspot: prefs:root=INTERNET_TETHERING
  • Osobisty hotspot aring Udostępnianie rodziny: prefs:root=INTERNET_TETHERING&path=Family%20Sharing
  • Osobisty hotspot ⇾ Hasło Wi-Fi: prefs:root=INTERNET_TETHERING&path=Wi-Fi%20Password

VPN

  • VPN: prefs:root=General&path=VPN

Powiadomienia

  • Powiadomienia: prefs:root=NOTIFICATIONS_ID
  • Powiadomienia ⇾ Sugestie Siri: prefs:root=NOTIFICATIONS_ID&path=Siri%20Suggestions

Dźwięki

  • Dźwięki: prefs:root=Sounds
  • Dzwonek: prefs:root=Sounds&path=Ringtone

Nie przeszkadzać

  • Nie przeszkadzać: prefs:root=DO_NOT_DISTURB
  • Nie przeszkadzać ⇾ Zezwalaj na połączenia od: prefs:root=DO_NOT_DISTURB&path=Allow%20Calls%20From

Czas ekranowy

  • Czas ekranowy: prefs:root=SCREEN_TIME
  • Czas ekranu ⇾ Przestój: prefs:root=SCREEN_TIME&path=DOWNTIME
  • Czas na ekranie Lim Ograniczenia aplikacji: prefs:root=SCREEN_TIME&path=APP_LIMITS
  • Czas ekranu ⇾ Zawsze dozwolone: prefs:root=SCREEN_TIME&path=ALWAYS_ALLOWED

Generał

  • Generał: prefs:root=General
  • Ogólne ⇾ Informacje o: prefs:root=General&path=About
  • Ogólne Update Aktualizacja oprogramowania: prefs:root=General&path=SOFTWARE_UPDATE_LINK
  • Ogólne ⇾ CarPlay: prefs:root=General&path=CARPLAY
  • Ogólne ⇾ Odświeżanie aplikacji w tle: prefs:root=General&path=AUTO_CONTENT_DOWNLOAD
  • Ogólne ⇾ Wielozadaniowość (tylko iPad): prefs:root=General&path=MULTITASKING
  • Ogólne ⇾ Data i godzina: prefs:root=General&path=DATE_AND_TIME
  • Ogólne ⇾ Klawiatura: prefs:root=General&path=Keyboard
  • Ogólne ⇾ Klawiatura ⇾ Klawiatury: prefs:root=General&path=Keyboard/KEYBOARDS
  • Ogólne ⇾ Klawiatura ⇾ Klawiatura sprzętowa: prefs:root=General&path=Keyboard/Hardware%20Keyboard
  • Ogólne ⇾ Klawiatura ⇾ Wymiana tekstu: prefs:root=General&path=Keyboard/USER_DICTIONARY
  • Ogólne ⇾ Klawiatura Keyboard Klawiatura jednoręczna: prefs:root=General&path=Keyboard/ReachableKeyboard
  • Ogólne ⇾ Język i region: prefs:root=General&path=INTERNATIONAL
  • Słownik ogólny ⇾: prefs:root=General&path=DICTIONARY
  • Ogólne iles Profile: prefs:root=General&path=ManagedConfigurationList
  • Ogólne ⇾ Resetuj: prefs:root=General&path=Reset

Centrum Kontroli

  • Centrum Kontroli: prefs:root=ControlCenter
  • Centrum sterowania ⇾ Dostosuj elementy sterujące: prefs:root=ControlCenter&path=CUSTOMIZE_CONTROLS

Pokaz

  • Pokaz: prefs:root=DISPLAY
  • Wyświetlacz ⇾ Automatyczna blokada: prefs:root=DISPLAY&path=AUTOLOCK
  • Wyświetlacz Size Rozmiar tekstu: prefs:root=DISPLAY&path=TEXT_SIZE

Dostępność

  • Dostępność: prefs:root=ACCESSIBILITY

Tapeta

  • Tapeta: prefs:root=Wallpaper

Siri

  • Siri: prefs:root=SIRI

Ołówek Jabłkowy

  • Ołówek Apple (tylko iPad): prefs:root=Pencil

Identyfikator twarzy

  • Identyfikator twarzy: prefs:root=PASSCODE

Awaryjne SOS

  • Awaryjne SOS: prefs:root=EMERGENCY_SOS

Bateria

  • Bateria: prefs:root=BATTERY_USAGE
  • Bateria Health Kondycja baterii (tylko iPhone): prefs:root=BATTERY_USAGE&path=BATTERY_HEALTH

Prywatność

  • Prywatność: prefs:root=Privacy
  • Prywatność Services Usługi lokalizacyjne: prefs:root=Privacy&path=LOCATION
  • Prywatność ⇾ Kontakty: prefs:root=Privacy&path=CONTACTS
  • Prywatność ⇾ Kalendarze: prefs:root=Privacy&path=CALENDARS
  • Prywatność ind Przypomnienia: prefs:root=Privacy&path=REMINDERS
  • Prywatność ⇾ Zdjęcia: prefs:root=Privacy&path=PHOTOS
  • Prywatność ⇾ Mikrofon: prefs:root=Privacy&path=MICROPHONE
  • Prywatność Rec Rozpoznawanie mowy: prefs:root=Privacy&path=SPEECH_RECOGNITION
  • Prywatność ⇾ Kamera: prefs:root=Privacy&path=CAMERA
  • Prywatność ⇾ Ruch: prefs:root=Privacy&path=MOTION\

Sklep z aplikacjami

  • Sklep z aplikacjami: prefs:root=STORE
  • App Store Downloads Pobieranie aplikacji: prefs:root=STORE&path=App%20Downloads
  • App Store ⇾ Autoodtwarzanie wideo: prefs:root=STORE&path=Video%20Autoplay

Portfel

  • Portfel: prefs:root=PASSBOOK

Hasła i konta

  • Hasła i konta: prefs:root=ACCOUNTS_AND_PASSWORDS
  • Hasła i konta ⇾ Pobierz nowe dane: prefs:root=ACCOUNTS_AND_PASSWORDS&path=FETCH_NEW_DATA
  • Hasła i konta ⇾ Dodaj konto: prefs:root=ACCOUNTS_AND_PASSWORDS&path=ADD_ACCOUNT

Poczta

  • Poczta: prefs:root=MAIL
  • Mail ⇾ Preview: prefs:root=MAIL&path=Preview
  • Poczta Options Opcje przesuwania: prefs:root=MAIL&path=Swipe%20Options
  • Mail ⇾ Powiadomienia: prefs:root=MAIL&path=NOTIFICATIONS
  • Mail ⇾ Zablokowany: prefs:root=MAIL&path=Blocked
  • Mail ⇾ Działanie wyciszonego wątku: prefs:root=MAIL&path=Muted%20Thread%20Action
  • Poczta Options Opcje zablokowanego nadawcy: prefs:root=MAIL&path=Blocked%20Sender%20Options
  • Poczta ⇾ Zaznacz adresy: prefs:root=MAIL&path=Mark%20Addresses
  • Mail ⇾ Zwiększ poziom oferty: prefs:root=MAIL&path=Increase%20Quote%20Level
  • Poczta ⇾ Dołącz załączniki z odpowiedziami: prefs:root=MAIL&path=Include%20Attachments%20with%20Replies
  • Mail ⇾ Podpis: prefs:root=MAIL&path=Signature
  • Poczta Account Domyślne konto: prefs:root=MAIL&path=Default%20Account

Łączność

  • Łączność: prefs:root=CONTACTS

Kalendarz

  • Kalendarz: prefs:root=CALENDAR
  • Kalendarz ⇾ Alternatywne kalendarze: prefs:root=CALENDAR&path=Alternate%20Calendars
  • Kalendarz ⇾ Synchronizacja: prefs:root=CALENDAR&path=Sync
  • Kalendarz ⇾ Domyślne czasy alertów: prefs:root=CALENDAR&path=Default%20Alert%20Times
  • Kalendarz ⇾ Domyślny kalendarz: prefs:root=CALENDAR&path=Default%20Calendar

Notatki

  • Uwagi: prefs:root=NOTES
  • Uwagi Account Konto domyślne: prefs:root=NOTES&path=Default%20Account
  • Uwagi ⇾ Hasło: prefs:root=NOTES&path=Password
  • Notatki ⇾ Sortuj notatki według: prefs:root=NOTES&path=Sort%20Notes%20By
  • Notatki ⇾ Nowe notatki Zacznij od: prefs:root=NOTES&path=New%20Notes%20Start%20With
  • Uwagi ⇾ Sortuj zaznaczone elementy: prefs:root=NOTES&path=Sort%20Checked%20Items
  • Uwagi ⇾ Linie i siatki: prefs:root=NOTES&path=Lines%20%26%20Grids
  • Notatki ⇾ Dostęp do notatek z ekranu blokady: prefs:root=NOTES&path=Access%20Notes%20from%20Lock%20Screen

Przypomnienia

  • Przypomnienia: prefs:root=REMINDERS
  • Przypomnienia ⇾ Lista domyślna: prefs:root=REMINDERS&path=DEFAULT_LIST

Notatki głosowe

  • Notatki głosowe: prefs:root=VOICE_MEMOS

Telefon

  • Telefon: prefs:root=Phone

Wiadomości

  • Wiadomości: prefs:root=MESSAGES

FaceTime

  • FaceTime: prefs:root=FACETIME

Mapy

  • Mapy: prefs:root=MAPS
  • Mapy ⇾ Jazda i nawigacja: prefs:root=MAPS&path=Driving%20%26%20Navigation
  • Mapy ⇾ Tranzyt: prefs:root=MAPS&path=Transit

Kompas

  • Kompas: prefs:root=COMPASS

Pomiar

  • Pomiar: prefs:root=MEASURE

Safari

  • Safari: prefs:root=SAFARI
  • Safari ers Blokowanie treści: prefs:root=SAFARI&path=Content%20Blockers
  • Safari ⇾ Pliki do pobrania: prefs:root=SAFARI&path=DOWNLOADS
  • Safari ⇾ Zamknij zakładki: prefs:root=SAFARI&path=Close%20Tabs
  • Safari ⇾ Wyczyść historię i dane: prefs:root=SAFARI&path=CLEAR_HISTORY_AND_DATA
  • Safari Zoom Powiększenie strony: prefs:root=SAFARI&path=Page%20Zoom
  • Safari ⇾ Poproś o stronę internetową na komputery: prefs:root=SAFARI&path=Request%20Desktop%20Website
  • Safari ⇾ Reader: prefs:root=SAFARI&path=Reader
  • Safari ⇾ Camera: prefs:root=SAFARI&path=Camera
  • Safari ⇾ Mikrofon: prefs:root=SAFARI&path=Microphone
  • Safari ⇾ Lokalizacja: prefs:root=SAFARI&path=Location
  • Safari ⇾ Advanced: prefs:root=SAFARI&path=ADVANCED

Aktualności

  • Aktualności: prefs:root=NEWS

Zdrowie

  • Zdrowie: prefs:root=HEALTH

Skróty

  • Skróty: prefs:root=SHORTCUTS

Muzyka

  • Muzyka: prefs:root=MUSIC
  • Muzyka Data Dane komórkowe: prefs:root=MUSIC&path=com.apple.Music:CellularData
  • Muzyka ⇾ Zoptymalizuj pamięć: prefs:root=MUSIC&path=com.apple.Music:OptimizeStorage
  • Muzyka ⇾ EQ: prefs:root=MUSIC&path=com.apple.Music:EQ
  • Muzyka Limit Limit głośności: prefs:root=MUSIC&path=com.apple.Music:VolumeLimit

telewizja

  • Ustawienia ⇾ TV: prefs:root=TVAPP

Zdjęcia

  • Zdjęcia: prefs:root=Photos

Aparat fotograficzny

  • Aparat fotograficzny: prefs:root=CAMERA
  • Kamera ⇾ Nagrywanie wideo: prefs:root=CAMERA&path=Record%20Video
  • Kamera ⇾ Nagrywanie w zwolnionym tempie: prefs:root=CAMERA&path=Record%20Slo-mo

Książki

  • Książki: prefs:root=IBOOKS

Centrum Gier

  • Centrum Gier: prefs:root=GAMECENTER

3

UIApplicationOpenSettingsURLStringzadziała to tylko wtedy, gdy wcześniej zezwoliłeś na jakiekolwiek pozwolenie. Na przykład Lokalizacja, Zdjęcie, Kontakt, Dostęp do powiadomień push. Jeśli więc nie masz takich uprawnień od użytkownika:

Jeśli iOS 10 lub nowszy ,

Otworzy Ustawienia, ale następnie zawiesi. Powodem tego jest brak ustawień aplikacji.

Poniższy kod otworzy ustawienia aplikacji w ustawieniach iOS.

NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
    [[UIApplication sharedApplication] openURL:url];
}

Z powodu niedostępności urządzenia nie mogłem tego sprawdzić na iOS <10.

Ponadto mogłem znaleźć poniższy kod z jakiegoś gist i działa dobrze również na iOS 10. Ale nie jestem pewien, czy to zatwierdzi zespół weryfikacyjny Apple, czy nie.

https://gist.github.com/johnny77221/bcaa5384a242b64bfd0b8a715f48e69f


3

W Swift 3 potrzebowałem tylko tego (tutaj na przykład przekieruj do powiadomień mojej aplikacji):

if let url = URL(string: "App-Prefs:root=NOTIFICATIONS_ID&path=your app bundleID") {
    if #available(iOS 10.0, *) {
        UIApplication.shared.open(url, completionHandler: .none)
    } else {
        // Fallback on earlier versions
    }
}

Źródło: phynet gist .

Działa to ze mną tylko wtedy, gdy ustawienia są w tle. Przekieruje Cię do ustawień powiadomień aplikacji, ale jeśli ustawienia nie działały w tle, po prostu przekieruje Cię do ustawień powiadomień w ogóle.


1

Możesz użyć do tego poniższego kodu.

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

1

SWIFT 4.0

„openURL” jest przestarzałe w iOS 10.0: Zamiast tego użyj openURL: options: completeHandler:

UIApplication.shared.open(URL.init(string: UIApplicationOpenSettingsURLString)! , options: [:], completionHandler: nil)

1

Szybki 4

Wolę otwierać ustawienia w bezpieczniejszy sposób,

if let settingUrl = URL(string:UIApplicationOpenSettingsURLString) {

    UIApplication.shared.open(settingUrl)
}
else {
    print("Setting URL invalid")
}

0

Swift Możesz użyć następującej funkcji, aby otworzyć aplikację Ustawienia ze stroną Bluetooth

func openSettingsApp(){
    if let settings = NSURL(string: "prefs:root=Bluetooth") {
        UIApplication.sharedApplication().openURL(settings)
    }
}

Ponownie nie otworzy to ustawień aplikacji. Spowoduje to otwarcie aplikacji ustawień z Bluetooth, ponieważ jest to precyzyjne połączenie z Bluetooth.


0

Testowane z iOS 10. Działa

NSArray* urlStrings = @[@"prefs:root=WIFI", @"App-Prefs:root=WIFI"];
for(NSString* urlString in urlStrings){
NSURL* url = [NSURL URLWithString:urlString];
if([[UIApplication sharedApplication] canOpenURL:url]){
    [[UIApplication sharedApplication] openURL:url];
    break;
}
}

Happy Coding :)


3
Spowoduje to odrzucenie Twojej aplikacji. Właśnie mi się to przydarzyło.
Bersaelor,

Czy to prawda, ale ten wiersz kodu zabierze Cię bezpośrednio do wybranej lokalizacji
Praveen Sharma

1
Tak, to cię tam zaprowadzi. Nie twierdzę, że to nie działa, po prostu zaznaczam, że spowoduje to odrzucenie podczas sprawdzania aplikacji. „prefs: root” to prywatny schemat adresów URL, zgodnie z tym, co powiedział nam zespół recenzentów. (Możesz mieć szczęście i nie zauważają przez chwilę, mieliśmy tę funkcję przez pewien czas i przeszliśmy kilka recenzji, zanim recenzent to zauważył)
Bersaelor

Dzięki za informację, spróbowałbym czegoś innego, ale teraz utknąłem w łączności VPN, znajdując rozwiązanie tego problemu.
Praveen Sharma

0

Aby dodać do zaakceptowanej odpowiedzi: (z dokumentacji programisty Apple) „Po otwarciu adresu URL zbudowanego z tego ciągu (openSettingsURLString) system uruchamia aplikację Ustawienia i wyświetla niestandardowe ustawienia aplikacji, jeśli takie istnieją”. Jeśli więc chcesz otworzyć ustawienia swojej aplikacji, utwórz własny plik Settings.bundle.


-1

Dodaj to do swojej klasy,

 public class func showSettingsAlert(title:String,message:String,onVC viewController:UIViewController,onCancel:(()->())?){
            YourClass.show2ButtonsAlert(onVC: viewController, title: title, message: message, button1Title: "Settings", button2Title: "Cancel", onButton1Click: {
                if let settingsURL = NSURL(string: UIApplicationOpenSettingsURLString){
                    UIApplication.sharedApplication().openURL(settingsURL)
                }
                }, onButton2Click: {
                    onCancel?()
            })
        }

 public class func show2ButtonsAlert(onVC viewController:UIViewController,title:String,message:String,button1Title:String,button2Title:String,onButton1Click:(()->())?,onButton2Click:(()->())?){
            dispatch_async(dispatch_get_main_queue()) {
                let alert : UIAlertController = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)

                alert.addAction(UIAlertAction(title: button1Title, style:.Default, handler: { (action:UIAlertAction) in
                    onButton1Click?()
                }))

                alert.addAction(UIAlertAction(title: button2Title, style:.Default, handler: { (action:UIAlertAction) in
                    onButton2Click?()
                }))

                viewController.presentViewController(alert, animated: true, completion: nil)
            }
        }

Zadzwoń tak

YourClass.showSettingsAlert("App would like to access camera", message: "App would like to access camera desc", onVC: fromViewController, onCancel: {
  print("canceled")
})
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.