1. ホーム
  2. android

[解決済み] 設定ページに移動せずに位置情報サービスをオンにする

2022-07-01 09:29:44

質問

設定ページに移動して位置情報サービスを有効にし、再び戻ってくるようユーザーに促す従来の方法に対して、最新のアプリのいくつかで同じことを行うより簡単な方法に気づきました。

以下のスクリーンショットを参照すると、1 回クリックするだけで位置情報サービスを有効にするためのダイアログが表示され、これらのアプリで機能します。

どうすれば同じことができるのでしょうか。

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

このダイアログは LocationSettingsRequest.Builder Google Play Servicesで利用可能です。

アプリに依存関係を追加する必要があります build.gradle :

compile 'com.google.android.gms:play-services-location:10.0.1'

それなら、この最小限の例を使えばいいんです。

private void displayLocationSettingsRequest(Context context) {
    GoogleApiClient googleApiClient = new GoogleApiClient.Builder(context)
            .addApi(LocationServices.API).build();
    googleApiClient.connect();

    LocationRequest locationRequest = LocationRequest.create();
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    locationRequest.setInterval(10000);
    locationRequest.setFastestInterval(10000 / 2);

    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder().addLocationRequest(locationRequest);
    builder.setAlwaysShow(true);

    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();
            switch (status.getStatusCode()) {
                case LocationSettingsStatusCodes.SUCCESS:
                    Log.i(TAG, "All location settings are satisfied.");
                    break;
                case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                    Log.i(TAG, "Location settings are not satisfied. Show the user a dialog to upgrade location settings ");

                    try {
                        // Show the dialog by calling startResolutionForResult(), and check the result
                        // in onActivityResult().
                        status.startResolutionForResult(MainActivity.this, REQUEST_CHECK_SETTINGS);
                    } catch (IntentSender.SendIntentException e) {
                        Log.i(TAG, "PendingIntent unable to execute request.");
                    }
                    break;
                case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                    Log.i(TAG, "Location settings are inadequate, and cannot be fixed here. Dialog not created.");
                    break;
            }
        }
    });
}

完全なサンプルを見ることができます これ .