はじめに
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:
の場合)以下のような三択のダイアログが出る。
ここで、【はい】もしくは【後で行う】を設定すれば以後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);
このように設定すると、
というような二択のダイアログになり、【いいえ】を選んでも、何度でもダイアログを出すことができる。
参考
さすがstackoverflow、なんでもありますね。