#java #android #google-maps #permissions #location
#Android #android-настройки #android-gps
Вопрос:
В приложениях на основе GPS важно, чтобы пользователь включил свой GPS. Если нет, то обычно мы показываем диалоговое окно, в котором говорится, что пользователь «должен включить свой GPS в настройках, чтобы иметь возможность использовать эту функциональность«.
Когда пользователь нажмет OK, он будет перенаправлен на страницу настроек, мне не нравится это решение, поскольку оно выводит пользователя из контекста приложения в настройки.
Я заметил, что приложение «Карты Google» имеет лучшее решение, которое заключается в том, чтобы показывать аккуратный диалог, когда требуется функция GPS. При выборе пользователем «OK» GPS будет включен напрямую, без какого-либо перенаправления на настройки.
Могу ли я включить GPS, не перенаправляя пользователя на экран настроек, как в приложении «Карты Google»?
проверьте изображение ниже:
Комментарии:
1. Ты справился с чесоткой? @A.Alqadomi
2. @AndreHoffmann это уже было сделано моим коллегой в нашем новом проекте. секрет заключается в использовании нового API от Google, который основан на получении местоположения из «сервисов Google Play». остальное просто
Ответ №1:
Чтобы иметь эту функцию, вам нужно:
- Сначала (по крайней мере) версия 7.0 play services
compile 'com.google.android.gms:play-services-location:16.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() amp;amp; userMarker == null) {
startLocationUpdates();
}
break;
case Activity.RESULT_CANCELED:
// The user was asked to change settings, but chose not to
break;
default:
break;
}
break;
}
}
Комментарии:
1. Я еще не подтвердил ответ, попробую позже. спасибо за помощь
2. Сервисы Google Play — это библиотека huuge. Чтобы включить только api определения местоположения, используйте
compile 'com.google.android.gms:play-services-location:8.1.0'
3. потрясающе. Спасибо. сэкономил мне много времени.
4. @AlvaroSantisteban Не могли бы вы предоставить ссылку на официальную документацию для вашего ответа?