Android: могу ли я включить GPS без перенаправления пользователя на экран настроек, как в приложении " Google maps

в приложениях на основе GPS важно, чтобы пользователь включил свой GPS. Если нет, то обычно мы показываем диалоговое окно, в котором говорится, что пользователь"должен включить свой GPS из настроек, чтобы иметь возможность использовать эту функцию".

когда пользователь нажимает OK, он будет перенаправлен на страницу настроек, мне не нравится это решение, так как оно выводит пользователя из контекста приложения в настройки.

Я заметил, что приложение "Google maps" имеет лучшее решение, которое должно показать аккуратный диалог, когда функция GPS необходима. При выборе пользователем "OK" GPS будет включен напрямую без какого-либо перенаправления на настройки.

могу ли я включить GPS без перенаправления пользователя на экран настроек, как в приложении "Google maps"?

проверка изображения ниже:

Neat Dialog

1 ответов


чтобы иметь эту функцию, вам нужно:

  • первая (по крайней мере) версия 7.0 play services

compile 'com.google.android.gms:play-services:7.0.0'

  • второе что-то вроде этого в вашем коде (у меня было это в моем onCreate):

-

 // Check the location settings of the user and create the callback to react to the different possibilities
LocationSettingsRequest.Builder locationSettingsRequestBuilder = new LocationSettingsRequest.Builder()
                .addLocationRequest(mLocationRequest);
PendingResult<LocationSettingsResult> result =
                LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, locationSettingsRequestBuilder.build());
result.setResultCallback(mResultCallbackFromSettings);

а затем создайте обратный вызов:

// The callback for the management of the user settings regarding location
private ResultCallback<LocationSettingsResult> mResultCallbackFromSettings = new ResultCallback<LocationSettingsResult>() {
    @Override
    public void onResult(LocationSettingsResult result) {
        final Status status = result.getStatus();
        //final LocationSettingsStates locationSettingsStates = 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(
                            MapActivity.this,
                            REQUEST_CHECK_SETTINGS);
                } catch (IntentSender.SendIntentException e) {
                    // Ignore the error.
                }
                break;
            case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                Log.e(TAG, "Settings change unavailable. We have no way to fix the settings so we won't show the dialog.");
                break;
        }
    }
};

и, наконец, в onActivityResult у меня было следующее:

/**
 * Used to check the result of the check of the user location settings
 *
 * @param requestCode code of the request made
 * @param resultCode code of the result of that request
 * @param intent intent with further information
 */
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    //final LocationSettingsStates states = LocationSettingsStates.fromIntent(intent);
    switch (requestCode) {
        case REQUEST_CHECK_SETTINGS:
            switch (resultCode) {
                case Activity.RESULT_OK:
                    // All required changes were successfully made
                    if (mGoogleApiClient.isConnected() && userMarker == null) {
                        startLocationUpdates();
                    }
                    break;
                case Activity.RESULT_CANCELED:
                    // The user was asked to change settings, but chose not to
                    break;
                default:
                    break;
            }
            break;
    }
}