web-dev-qa-db-ja.com

ユーザーに位置情報サービスをオンにするように促す方法...もう一度

マップアプリと同じ機能が必要です。ユーザーは、[現在地]ボタンを押すたびに、位置情報サービスがオフの場合にオンにするように求められます。

  • 位置情報サービスをオフにする
  • ユーザーが「getCurrentLocation」ボタンを押す
  • アプリはCLLocationManagerを使用して場所を取得しようとします
  • ユーザーは、「設定」ボタンと「キャンセル」ボタンを示す「位置情報サービスをオンにする...」メッセージを受け取ります。
  • ユーザーが「キャンセル」をタップ
  • ユーザーが「getCurrentLocation」ボタンをもう一度押す
  • アプリはCLLocationManagerを使用して位置情報を再度取得しようとします
  • ユーザーに「位置情報サービスをオンにする...」というメッセージが表示されなくなりました

マップアプリでは、ユーザーは毎回「位置情報サービスをオンにする...」というメッセージを受け取ります。アプリに同じことをさせるにはどうすればよいですか?問題が発生した場合に備えて、CLLocationManagerの新しいインスタンスを使用しているユーザーを作成しましたが、そうではありませんでした。これに影響する設定が表示されません。

独自のアラートを作成すると、同じ[設定]ボタン機能を取得できません。また、同じように見える複数のアラートをユーザーに表示したくありません。

何か案は?

18
toofah

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];
22
Aaron Wasserman

設定アプリの位置情報サービス画面にユーザーを戻す場合は、次のような特別なURLにユーザーを送信します。

[[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"prefs:root=LOCATION_SERVICES"]];
19
Jacob White

位置情報サービスが有効になっている場合は、共有CLLocationManagerインスタンスにクエリを実行できます。 正しい方法は、位置情報サービスを無効にするというユーザーの選択を尊重することです。

ただし、必要に応じて、位置情報サービスを開始するだけで、ユーザーは位置情報サービスを再開するように求められます。ユーザーがリクエストをオプトインすると、通常どおり場所が代理人に報告され始めます。代わりにユーザーがリクエストを拒否すると、locationManager:didFailWithError:デリゲートメソッドへのコールバックが失敗します。エラーのエラーコードはkCLErrorDeniedになります。

これを行うことは強くお勧めしませんが、ユーザーが「いいえ」と言った場合は、サービスの再開を試みることができ、ユーザーは再度尋ねられます。しかし、ほとんどのユーザーはあなたを嫌うでしょう。

10
PeyloW