2015-03-11 3 views
1

Im делает приложение для прослушивания местоположения в реальном времени, и мне нужно вызывать обновления местоположения в каждые 3 секунды.Запрос обновлений местоположения чаще, чем 5 секунд (Android Fused location)

Я использую 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()); 

} 

Logcat:

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 location, но я ничего не нашел о минимальном значении интервала.

Любые предложения?

E D I T:

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): ========================================================= 

EDIT 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" /> 
+0

Попробуйте установить смещение на 0 –

+0

Я думаю, вам нужно провести какое-то испытание в реальном мире. Похоже, он все еще обнуляется в вашем тесте. Я также хотел бы увидеть место.getTime() – danny117

+0

@MuhammadBabar Все тот же результат –

ответ

2

Запуск кода в деятельности с интервалом, установленным в 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); 

Logcat:

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] 

Edit: Docs также сказать вам, что setInterval (длинный) может иметь обновления на более медленный или более быстрый который указан.

+0

Протестировано на другом устройстве, и оно работает. Похоже, что на самом деле существует нечто, называемое аппаратными ограничениями. –

+0

Я не думаю, что вы можете установить 'setFasterstInterval (0)', потому что это будет отправлять вам обновления местоположения в каждый момент времени, и вы можете столкнуться с проблемами с миганием пользовательского интерфейса или переполнением данных. Поэтому установите это значение в размере, превышающем скорость, в которой ваше приложение может обновлять свой пользовательский интерфейс. – CopsOnRoad

Смежные вопросы