マップアプリと同じ機能が必要です。ユーザーは、[現在地]ボタンを押すたびに、位置情報サービスがオフの場合にオンにするように求められます。
マップアプリでは、ユーザーは毎回「位置情報サービスをオンにする...」というメッセージを受け取ります。アプリに同じことをさせるにはどうすればよいですか?問題が発生した場合に備えて、CLLocationManagerの新しいインスタンスを使用しているユーザーを作成しましたが、そうではありませんでした。これに影響する設定が表示されません。
独自のアラートを作成すると、同じ[設定]ボタン機能を取得できません。また、同じように見える複数のアラートをユーザーに表示したくありません。
何か案は?
IOS 8の新機能として、UIApplicationOpenSettingsURLString
という定数があります。
"iOSの新機能" UIKitの下のドキュメントは次の行です。
設定アプリで、ユーザーをアプリ関連の設定に直接移動できます。
UIApplicationOpenSettingsURLString
定数をUIApplicationクラスのopenURL:メソッドに渡します。
Appleの ドキュメント から:
UIApplicationOpenSettingsURLString
OpenURL:メソッドに渡すことができるURLを作成するために使用されます。この文字列から作成されたURLを開くと、システムは設定アプリを起動し、アプリのカスタム設定がある場合はそれを表示します。
これをUIApplicationopenURL:メソッドに渡すことができます。次のようになります。
NSURL *settings = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication] canOpenURL:settings])
[[UIApplication sharedApplication] openURL:settings];
設定アプリの位置情報サービス画面にユーザーを戻す場合は、次のような特別なURLにユーザーを送信します。
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"prefs:root=LOCATION_SERVICES"]];
位置情報サービスが有効になっている場合は、共有CLLocationManager
インスタンスにクエリを実行できます。 正しい方法は、位置情報サービスを無効にするというユーザーの選択を尊重することです。
ただし、必要に応じて、位置情報サービスを開始するだけで、ユーザーは位置情報サービスを再開するように求められます。ユーザーがリクエストをオプトインすると、通常どおり場所が代理人に報告され始めます。代わりにユーザーがリクエストを拒否すると、locationManager:didFailWithError:
デリゲートメソッドへのコールバックが失敗します。エラーのエラーコードはkCLErrorDenied
になります。
これを行うことは強くお勧めしませんが、ユーザーが「いいえ」と言った場合は、サービスの再開を試みることができ、ユーザーは再度尋ねられます。しかし、ほとんどのユーザーはあなたを嫌うでしょう。