Android: могу ли я включить GPS, не перенаправляя пользователя на экран настроек, как в приложении "google maps"
В приложениях, основанных на GPS, важно, чтобы пользователь включил свой GPS. Если нет, то обычно мы показываем диалог, в котором говорится, что пользователь " должен включить свой GPS из настроек, чтобы иметь возможность использовать эту функциональность".
Когда пользователь нажимает OK, он будет перенаправлен на страницу настроек, мне не нравится это решение, так как оно выводит пользователя из контекста приложения в настройки.
Я заметил, что приложение "google maps" имеет лучшее решение, то есть, чтобы показать аккуратный диалог, когда требуется функция GPS. После выбора пользователем "OK" GPS будет включен напрямую без перенаправления на настройки.
Могу ли я включить GPS, не перенаправляя пользователя на экран настроек, как в приложении "google maps"?
Проверьте изображение ниже:
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; } }