Запрос обновлений местоположения чаще, чем 5 секунд (местоположение Android Fused)

Я делаю приложение для прослушивания местоположения в реальном времени, и мне нужно вызывать обновления местоположения каждые 3 секунды.

Я использую местоположение Fused.

Мой интервал установлен на 3 секунды, однако похоже, что минимальное значение для этого интервала составляет 5 секунд.

Код:

public class GpsService extends Service implements ConnectionCallbacks, OnConnectionFailedListener, LocationListener {

private static int UPDATE_INTERVAL = 1000 * 3; // /< location update interval
private static int FASTEST_INTERVAL = 1000 * 3; // /< fastest location update interval
private static int DISPLACE_METERS = 10; // displacement in meters, not used atm
private LocationRequest mLocationRequest;
private LocationWrapper mLastLocation;

...


mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(UPDATE_INTERVAL);
mLocationRequest.setFastestInterval(FASTEST_INTERVAL);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

...

@Override
public void onLocationChanged(Location location) {

    mLastLocation = new LocationWrapper(location);
    log("onLocationChanged" + " " + mLastLocation.toString());

}

Логкат:

03-11 14:35:41.559: I/Locationing_GpsService(7410): Lat: 47.513878
03-11 14:35:41.559: I/Locationing_GpsService(7410): Lng: 19.0362011
03-11 14:35:41.559: I/Locationing_GpsService(7410): Accuracy: 21.213 meters
03-11 14:35:41.559: I/Locationing_GpsService(7410): ===================
03-11 14:35:46.554: I/Locationing_GpsService(7410): Lat: 47.5138783
03-11 14:35:46.554: I/Locationing_GpsService(7410): Lng: 19.0362064
03-11 14:35:46.554: I/Locationing_GpsService(7410): Accuracy: 17.32 meters
03-11 14:35:46.554: I/Locationing_GpsService(7410): ===================
03-11 14:35:51.569: I/Locationing_GpsService(7410): Lat: 47.5138752
03-11 14:35:51.569: I/Locationing_GpsService(7410): Lng: 19.0362068
03-11 14:35:51.569: I/Locationing_GpsService(7410): Accuracy: 15.0 meters

Вы можете увидеть дату logcat, она с задержкой в ​​5 секунд: 41, 46, 51 Я прочитал документ Google о местоположении Fused, но ничего не нашел о минимальном значении интервала.

Какие-либо предложения?

Э Д И Т:

Добавил getTime() в журнал и проанализировал его в объект Date, вы можете более четко увидеть 5-секундную задержку.

03-11 15:16:01.851: I/Locationing_GpsService(16747): Lat: 47.5138798
03-11 15:16:01.851: I/Locationing_GpsService(16747): Lng: 19.0362125
03-11 15:16:01.851: I/Locationing_GpsService(16747): Accuracy: 28.713 meters
03-11 15:16:01.851: I/Locationing_GpsService(16747): Time: Wed Mar 11 15:16:01 CET 2015   
03-11 15:16:01.851: I/Locationing_GpsService(16747): =========================================================
03-11 15:16:06.946: I/Locationing_GpsService(16747): Lat: 47.5138765
03-11 15:16:06.946: I/Locationing_GpsService(16747): Lng: 19.0361987
03-11 15:16:06.946: I/Locationing_GpsService(16747): Accuracy: 20.902 meters
03-11 15:16:06.946: I/Locationing_GpsService(16747): Time: Wed Mar 11 15:16:06 CET 2015   
03-11 15:16:06.946: I/Locationing_GpsService(16747): =========================================================
03-11 15:16:11.971: I/Locationing_GpsService(16747): Lat: 47.5138767
03-11 15:16:11.971: I/Locationing_GpsService(16747): Lng: 19.0361916
03-11 15:16:11.971: I/Locationing_GpsService(16747): Accuracy: 17.326 meters
03-11 15:16:11.971: I/Locationing_GpsService(16747): Time: Wed Mar 11 15:16:11 CET 2015   
03-11 15:16:11.971: I/Locationing_GpsService(16747): =========================================================

Э Д И Т 2:

Разрешения:

 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

person Adam Varhegyi    schedule 11.03.2015    source источник
comment
попробуйте установить смещение на 0   -  person Muhammad Babar    schedule 11.03.2015
comment
Я думаю, вам следует провести некоторые тесты в реальном мире. Похоже, он все еще обнуляется в вашем тесте. Я также хотел бы увидеть location.getTime()   -  person danny117    schedule 11.03.2015
comment
@MuhammadBabar Все тот же результат   -  person Adam Varhegyi    schedule 11.03.2015
comment
попробуйте изменить UPDATE_INTERVAL на 1s   -  person hrskrs    schedule 11.03.2015
comment
@hrskrs Почему? Пробовал не помогло.   -  person Adam Varhegyi    schedule 11.03.2015
comment
@AdamVarhegyi ну, может быть, после Fastest Interval есть задержка Updated_Interval, поэтому хотел посмотреть, повлияет ли это, но не сделал :/   -  person hrskrs    schedule 11.03.2015
comment
Кажется, я не могу воспроизвести проблему, к которой вы обращаетесь, я могу сделать свое 1-секундное обновление.   -  person Spurdow    schedule 11.03.2015
comment
Я использую Сервис, это считается?   -  person Adam Varhegyi    schedule 11.03.2015
comment
Я тоже пользуюсь сервисом, я могу манипулировать обновлением своего местоположения через транспортный механизм. TCP   -  person Spurdow    schedule 11.03.2015
comment
@AdamVarhegyi: Какие разрешения на местоположение вы установили?   -  person Squonk    schedule 11.03.2015
comment
Можете ли вы попробовать установить update_interval = 500, самый быстрый_интервал = 250?   -  person Spurdow    schedule 11.03.2015
comment
@Spurdow Да, теперь иногда 5, а иногда 1 секунду. :\   -  person Adam Varhegyi    schedule 11.03.2015


Ответы (1)


Запуск вашего кода в Activity с интервалом, установленным на 0, производит обновления со скоростью 1 в секунду на Nexus 4, 5 и 7... точно так же, как при использовании LocationManager. Вы можете быть ограничены оборудованием вашего устройства. Вы только что пытались запросить самый быстрый интервал обновления с помощью LocationRequest и LocationManager? Если они оба ограничены 5 секундами, я подозреваю, что это связано с аппаратным обеспечением устройства.

Запрос местоположения:

    mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(0);
    mLocationRequest.setFastestInterval(0);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

Логкат:

03-11 09:50:26.931: D/MainActivity(5623): onLocationChanged Location[fused 0,0 acc=12 et=+1d17h57m7s979ms alt=1505.0 vel=0.0]
03-11 09:50:27.514: D/MainActivity(5623): onLocationChanged Location[fused 0,0, acc=12 et=+1d17h57m8s571ms alt=1505.0 vel=0.0]

Изменить: Документы также сообщают вам, что setInterval(long) может иметь обновления с меньшей или большей скоростью, чем указано.

person Kaleb    schedule 11.03.2015
comment
Проверено на другом устройстве, все работает. Похоже, что-то, называемое аппаратными ограничениями, действительно существует. - person Adam Varhegyi; 17.03.2015
comment
Я не думаю, что вы можете установить setFasterstInterval(0), потому что это будет отправлять вам обновления местоположения в каждый момент, и вы можете столкнуться с проблемами с мерцанием пользовательского интерфейса или переполнением данных. Поэтому установите для этого значения скорость, превышающую скорость, с которой ваше приложение может обновлять свой пользовательский интерфейс. - person CopsOnRoad; 17.03.2017
comment
я использую плавный поставщик местоположения, когда мое приложение находится на переднем плане, я получаю частое обновление местоположения, но тот же код в фоновом режиме я получаю меньше обновлений местоположения, пожалуйста, помогите мне .. - person Gaurav Singhal; 22.10.2018