У меня возникают проблемы с задержкой на некоторых телефонах при получении данных GPS. Координаты берутся, когда пользователь нажимает на некоторые поля, которым требуется местоположение пользователя для проверки данных. Телефоны Моторола работают нормально. При тестировании с телефонами OnePlus 3T (A3000) и LG задержка получения телефона GPS составляет от 12 до 15 секунд, независимо от того, какого провайдера я выбираю и где находится пользователь (гараж, дом, офис). И неважно, сколько раз пользователь отвечает на одно и то же поле.
Я прочитал ссылки:
Получение слишком большой задержки от слушателя OnLocationChange.?
Стратегии определения местоположения
Под кодом:
public void getLocation(final LocationListener locationListener) {
if (locationListener == null) return;
LocationRequest locationRequest = new LocationRequest();
locationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
locationRequest.setInterval(500);
locationRequest.setFastestInterval(500);
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
.addLocationRequest(locationRequest)
.setAlwaysShow(true);
GoogleApiClient googleApiClient = new GoogleApiClient.Builder(this)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
googleApiClient.connect();
PendingResult<LocationSettingsResult> result = LocationServices.SettingsApi
.checkLocationSettings(googleApiClient, builder.build());
result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
@Override
public void onResult(@NonNull LocationSettingsResult locationSettingsResult) {
final Status status = locationSettingsResult.getStatus();
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
criteria.setSpeedRequired(true);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
switch (status.getStatusCode()) {
case LocationSettingsStatusCodes.SUCCESS:
LocationManager locationManager =
((LocationManager) getSystemService(Context.LOCATION_SERVICE));
showError("NETWORK: "+ locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER));
showError("GPS: "+locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER));
String provider = locationManager.getBestProvider(criteria, true);
if (App.isVersionGreaterThanLollipop()){
if (ActivityCompat.checkSelfPermission(
ChecklistActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
Location loc = locationManager.getLastKnownLocation(provider);
currentLcoation = loc;
showError("BEST PROVIDER: "+provider+" CURRENT LOCATION: " +loc.getLatitude()+" "+loc.getLongitude());
locationManager.requestSingleUpdate(
criteria, locationListener, null);
}
else {
requestLocationPermission(locationListener);
}
...
}
...
Независимо от того, заставлю ли я NETWORD_PROVIDER получить быстрое местоположение, он продолжает задерживаться.
Как я могу получить данные GPS, преодолев эту задержку?