Итак, у меня есть приложение.Это зависит от местоположения пользователя.На многих устройствах все работало нормально, как я и ожидал.Есть проблема с samsung s8, я проверил 4 реальных s8 от разных пользователей и с другим приложением, которому нужно местоположение, и проблема там.Но теперь мой xiaomi mi a1 (с чистым android) получает обновление безопасности для Android (8.1 ноября), и я получаю ту же проблему, что и на s8.
Проблема: я отключаю службу определения местоположения в настройках устройства.Я запускаю свое приложение или другое приложение, которому нужно местоположение (не карты Google, оно работает потрясающе).Я получаю системный диалог по умолчанию для включения служб определения местоположения.Я нажимаю ОК, и один раз он запускает службу определения местоположения со всеми источниками, а в другой раз он запускает только GPS.«Только GPS» работает очень плохо, я жду одну - две минуты, и это не дает моей позиции и не устанавливает синюю точку на карте.Я выключаю местоположение и закрываю приложение, открываю и снова открываю это диалоговое окно, и после «ОК» оно запускает все источники, и я мгновенно получаю местоположение.
Как я понимаю, режим, который будет установлен при запуске службы определения местоположениязависит от приоритета LocationRequest.Так почему же когда-то он установил режим «все источники» и один раз «только gps», это примерно LocationRequest.PRIORITY_HIGH_ACCURACY
.Если я попытаюсь использовать LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY
(это мое значение по умолчанию для s8) на всех устройствах, которые я проверял, он запустит режим «wifi и другие сети», но все время будет в том же режиме.
Я использую FusedLocationClient.Мой код для запуска системного диалогового окна:
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
.addLocationRequest(getLocationRequest());
builder.setAlwaysShow(true);
SettingsClient client = LocationServices.getSettingsClient(this);
Task<LocationSettingsResponse> task = client.checkLocationSettings(builder.build());
task.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
if (e instanceof ResolvableApiException) {
try {
// Show the dialog by calling startResolutionForResult(),
// and check the result in onActivityResult().
ResolvableApiException resolvable = (ResolvableApiException) e;
resolvable.startResolutionForResult(MapsActivity.this,
REQUEST_CHECK_SETTINGS);
} catch (IntentSender.SendIntentException sendEx) {
// Ignore the error.
if (sendEx.getMessage() != null) {
Crashlytics.logException(new RuntimeException("startGpsService: " + sendEx.getMessage()));
}
}
}
}
});
И мой LocationRequest:
if (mLocationRequest == null) {
mLocationRequest = new LocationRequest();
if (Build.MANUFACTURER.toLowerCase().contains("samsung") &&
Build.MODEL.toLowerCase().contains("sm-g95")) {
mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
} else {
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
}
mLocationRequest.setInterval(2000);
mLocationRequest.setFastestInterval(1000);
}
return mLocationRequest;
Я буду рад получить любые предложения.
Обновление,Я провожу некоторые тесты, это журнал:
2018-11-20 09:56:11.055 29850-29850 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: NETWORK_PROVIDER && GPS_PROVIDER both enabled
2018-11-20 09:56:29.554 30111-30111 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: location providers not enabled
2018-11-20 09:56:48.847 30309-30309 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: NETWORK_PROVIDER && GPS_PROVIDER both enabled
2018-11-20 09:57:30.645 30647-30647 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: location providers not enabled
2018-11-20 09:57:58.354 30908-30908 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: NETWORK_PROVIDER && GPS_PROVIDER both enabled
2018-11-20 09:58:16.632 31159-31159 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: location providers not enabled
2018-11-20 09:59:57.753 1665-1665 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: NETWORK_PROVIDER && GPS_PROVIDER both enabled
2018-11-20 10:00:14.176 2200-2200 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: NETWORK_PROVIDER && GPS_PROVIDER both enabled
2018-11-20 10:00:30.406 2963-2963 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: NETWORK_PROVIDER && GPS_PROVIDER both enabled
2018-11-20 10:00:45.215 3398-3398 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: location providers not enabled
Все время, когда я получаю сообщение «провайдеры местоположения не включены», оно приходит к onActivityResult
с (requestCode == REQUEST_CHECK_SETTINGS && resultCode == RESULT_CANCELED)
и включается режим «Только устройство».
Похоже, это зависит от того, где именно был мой палец на кнопке «Да».Дополнительный вопрос: могу ли я сделать пользовательский вид для диалогового окна «включить местоположение» системы?