LoginSignup
14
16

More than 5 years have passed since last update.

【Android】SettingsApiで、LocationSettingsResultのステータスをSETTINGS_CHANGE_UNAVAILABLEから復旧する方法

Last updated at Posted at 2016-01-17

はじめに

SettingsApiを使用してGPSの設定をする際、ダイアログの【変更しない】を選択してしまうと、以後ダイアログが表示されず、(本体の設定画面から変更しても)毎回ステータスがSETTINGS_CHANGE_UNAVAILABLEになってしまう。

解決するには、LocationSettingsRequest.Builderに、

builder.setAlwaysShow(true);

を設定すればよい。

修正前

↓の記事を参考にさせていただき、SettingsApiを使用してGPSの設定ダイアログを開くようにした。

FusedLocationApiを使うときはSettingsApiを使ってユーザの設定を確認すべし (GPSオンだけでは不十分な時がある)

以下、修正前のコード。


    public static void checkLocationPreference() {
        LocationRequest request =  new LocationRequest()
                .setInterval(1000)
                .setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);

        LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
                .addLocationRequest(request);

        PendingResult<LocationSettingsResult> result = LocationServices.SettingsApi.checkLocationSettings(
                mGoogleApiClient, builder.build());

        result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
            @Override
            public void onResult(LocationSettingsResult locationSettingsResult) {
                /* 本体のGPSの設定を確認 */
                final Status status = locationSettingsResult.getStatus();
                switch(status.getStatusCode()) {
                    /* 現在地が取得できる設定になっている場合 */
                    case LocationSettingsStatusCodes.SUCCESS:
                        break;
                    /* 現在地が取得できない設定なので、設定画面を開く */
                    case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                        try {
                            status.startResolutionForResult(activity, REQUEST_CODE);
                        } catch (IntentSender.SendIntentException e) {}
                        break;
                    /* 一度でも【変更しない】を選択すると、以後は全部このステータス */
                    case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                        break;
                }
            }
        });
    }


これを実行すると、GPSがOFFの場合(case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:の場合)以下のような三択のダイアログが出る。

before.jpg

ここで、【はい】もしくは【後で行う】を設定すれば以後GPSをOFFにした際にもダイアログが出るのだが、
【変更しない】を選択すると、今後このダイアログが出現せず、常にcase LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:になってしまう。

英語設定だと【NEVER】と表示されているので、どうやら【(今後一生)変更しない】という意味らしい。

修正後

これを修正するには、


        LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
                .addLocationRequest(request);

を、以下のように修正。

        LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
                .setAlwaysShow(true) // ← これを追加
                .addLocationRequest(request);

このように設定すると、

after.jpg

というような二択のダイアログになり、【いいえ】を選んでも、何度でもダイアログを出すことができる。

参考

さすがstackoverflow、なんでもありますね。

14
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
16