1. ホーム
  2. android

[解決済み] Googleマップのような位置情報ダイアログを表示するには?

2022-06-08 06:13:12

質問

Google Play Services の最新版 (7.0) を使用しており、そのガイドに記載されている手順に従って、以下のような位置情報ダイアログを有効化し、その中に "never" ボタンがあります。私のアプリは強制的に位置情報を必要とするので、ユーザーに "never" を表示したくありません。一度ユーザーが "never" をクリックすると、位置情報の取得や位置情報の要求を再度行うことが全くできなくなるからです。

Google Mapsでは、「はい」と「いいえ」ボタンしかなく、「決して」ボタンはありません。

私のアプリの画像

Googleマップの画像

どのように解決するのですか?

LocationSettingsRequest.Builder(ロケーションセッティングリクエスト)。 にはメソッド setAlwaysShow(boolean show) . ドキュメントが現在何もしていないことを示す一方で (を設定すると(2015-07-05更新:Googleのドキュメントが更新され、この文言が削除されました)。 builder.setAlwaysShow(true); を設定すると、Google Mapsの動作が有効になります。

これが動作するようになったコードです。

if (googleApiClient == null) {
    googleApiClient = new GoogleApiClient.Builder(getActivity())
            .addApi(LocationServices.API)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this).build();
    googleApiClient.connect();

    LocationRequest locationRequest = LocationRequest.create();
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    locationRequest.setInterval(30 * 1000);
    locationRequest.setFastestInterval(5 * 1000);
    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
            .addLocationRequest(locationRequest);

    //**************************
    builder.setAlwaysShow(true); //this is the key ingredient
    //**************************

    PendingResult<LocationSettingsResult> result =
            LocationServices.SettingsApi.checkLocationSettings(googleApiClient, builder.build());
    result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
        @Override
        public void onResult(LocationSettingsResult result) {
            final Status status = result.getStatus();
            final LocationSettingsStates state = result.getLocationSettingsStates();
            switch (status.getStatusCode()) {
                case LocationSettingsStatusCodes.SUCCESS:
                    // All location settings are satisfied. The client can initialize location
                    // requests here.
                    break;
                case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                    // Location settings are not satisfied. But could be fixed by showing the user
                    // a dialog.
                    try {
                        // Show the dialog by calling startResolutionForResult(),
                        // and check the result in onActivityResult().
                        status.startResolutionForResult(
                                getActivity(), 1000);
                    } catch (IntentSender.SendIntentException e) {
                        // Ignore the error.
                    }
                    break;
                case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                    // Location settings are not satisfied. However, we have no way to fix the
                    // settings so we won't show the dialog.
                    break;
            }
        }
    });
}

Androidドキュメントより

Kotlinについてはこちらをご覧ください。 https://stackoverflow.com/a/61868985/12478830