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.