web-dev-qa-db-ja.com

別のアプリから設定アプリを開く

さて、私はそれについて多くの質問があることを知っていますが、それらはすべて昔からのものです。

そう。 Mapアプリがそれを行うので、それが可能であることを知っています。

マップアプリでこのアプリのローカライズをオフにすると、メッセージが送信され、[OK]を押すと[設定アプリ]が開きます。そして私の質問は、これはどのように可能ですか?自分のアプリから「設定アプリ」を開くにはどうすればよいですか?

基本的に同じことをする必要があります。ユーザーがアプリの場所をオフにすると、「設定アプリ」を開くことを知らせるメッセージが表示されます。

153
FelipeDev.-

Karan Dua で述べたように、これは iOS8で可能になりましたUIApplicationOpenSettingsURLStringを使用して Appleのドキュメント を参照してください。

例:

Swift 4.2

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

In Swift 3:

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

In Swift 2:

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

Objective-Cでは

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

iOS 8以前:

それはいけません。あなたが言ったように、これは何度も取り上げられており、位置情報サービスをオンにするように求めるポップアップは、アプリ自体ではなくAppleによって提供されます。そのため、設定アプリケーションを開くことができます。

関連する質問と記事は次のとおりです。

openURLを使用して設定アプリを開くことは可能ですか?

プログラムで設定アプリを開く(iPhone)

ユーザーがボタンを押したときに設定アプリを開くにはどうすればよいですか?

iPhone:アプリからアプリケーション設定パネルを開く

アプリの設定でエントリをクリックしてUIPickerViewを開く-方法?

設定アプリを開きますか?

iOS:設定が間違っています

246
Joe

@ Yatheeshalessanswer から:

IOS8では設定アプリをプログラムで開くことができますが、以前のバージョンのiOSではできません。

スイフト:

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

スイフト4:

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

Swift 4.2(ベータ):

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

Objective-C:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
128
Karan Dua

YES !!デバイス設定画面を起動できます。iOS 9.2でテスト済み

ステップ1. URLスキームを追加する必要があります

[プロジェクト設定]-> [情報]-> [URLタイプ]-> [新しいURLスキームの追加]に移動します

enter image description here

ステップ2.@davidcann によるプログラムによる設定の起動

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

また、適切な名前を使用するだけで、音楽、場所などのサブ画面を起動することもできます

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

この完全な名前のリストを見る here Henri Normakが共有


更新:

コメントによると、誰もが私の申請提出ステータスのこの変更後に何が起こるか知りたいですか?

だからYES!! I got successful update submission and application is available on store without any complain.

確認のため、今朝ダウンロードして位置情報サービスを無効にしてからアプリを起動し、位置情報の許可を求められた後、アラートポップアップが表示され、設定->位置情報サービスページ->有効化->それでおしまい!!

![注意:アプリが拒否される可能性があります...承認されていても、この方法を使用すると将来のバージョンで拒否される可能性があります...]4

56
swiftBoy

IOS 5.0以降でこれを使用できます。 これはもう機能しません。

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

iOS 10アップデート

Appleは、メインスレッドで非同期を開くようにメソッドを変更しました。ただし、今後はネイティブ設定でのみアプリ設定を開くことができます。

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

iOS 9アップデート

サブ設定メニューに直接移動できるようになりました。ただし、URLスキームを作成する必要があります。次の2つの方法で実行できます。

  1. XCode-Target、Info、URL Schemeにあります。次に、prefsと入力します。
  2. * -Info.plistに直接追加します。以下を追加します:<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleTypeRole</key> <string>Editor</string> <key>CFBundleURLSchemes</key> <array> <string>prefs</string> </array> </dict> </array>

次に、コード:

Swift

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

Objective-c

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

13
guyromb

Swift 3/iOS 10+では、これは次のようになります

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

スウィフト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
Duy Doan

Swift 3で必要なのはこれだけです(ここでは、たとえば、アプリの通知にリダイレクトします):

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
    }
}

ソース: phynet Gist

これは、設定がバックグラウンドにある場合にのみ機能しました。アプリの通知設定にリダイレクトされますが、設定がバックグラウンドで実行されていない場合は、一般的な通知設定にリダイレクトされます。

3
ynamao

UIApplicationOpenSettingsURLStringこれは、以前に許可を許可した場合にのみ機能します。たとえば、場所、写真、連絡先、プッシュ通知アクセス。そのため、ユーザーからそのような許可がない場合:

iOS 10以降

設定は開きますが、クラッシュします。その理由は、アプリの設定には何もありません。

以下のコードは、iOS設定内のアプリケーション設定を開きます。

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

デバイスが利用できないため、iOS <10ではこれを確認できませんでした。

また、いくつかのGistから以下のコードを見つけることができ、iOS 10でも正常に動作します。しかし、これがAppleレビューチームによって承認されるかどうかはわかりません。

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

2
Hemang

Swift 4.

「openURL」はiOS 10.0で非推奨になりました:代わりにopenURL:options:completionHandler:を使用してください

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

以下のコードを使用できます。

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

Swift 4

より安全な方法で設定を開くことを好みますが、

if let settingUrl = URL(string:UIApplicationOpenSettingsURLString) {

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

Swift次の機能を使用して、Bluetoothページで設定アプリを開くことができます

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

繰り返しますが、これはアプリの設定を開きません。これは、Bluetoothへのディープリンクであるため、Bluetoothで設定アプリを開きます。

0
Alix

IOS 10でテスト済み。

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;
}
}

ハッピーコーディング:)

0
Praveen Sharma