我创建了一个GPS
服务,该服务定期读取位置更新。之前有一个问题是GPS
在一段时间后处于睡眠模式,之后没有任何位置更新。
现在我已经更改了我的代码,以便定期取消注册并注册GPS
位置更新。这解决了我GPS
进入睡眠模式的问题,但是创建了一个新问题。那是
我的服务在一段时间后终止。我无法检查原因。请帮助。
以下是一些代码snipplet
@Override
public void onCreate() {
super.onCreate();
timer.schedule(checkLocationListener, new Date(), 1000 * 60 * 15);
}
private TimerTask checkLocationListener = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
public void run() {
lm.removeUpdates(LocationService.this);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, CommonConstants.GPS_POLL,
CommonConstants.GPS_MIN_DIST, LocationService.this);
}
});
}
};
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(LocationService.class.getSimpleName(), "Start");
valueMap.put(CommonConstants.STATUS, CommonConstants.STATUS_DROP);
trackMe();
new Thread() {
public void run() {
while (true) {
try {
String url = DeviceConfig.getMessage();
if (url == null) {
Thread.sleep(60000);
continue;
}
HttpRequester.getServerResponse(url, null);
DeviceConfig.addValue(CommonConstants.SERVER_UPD, "" + System.currentTimeMillis());
DeviceConfig.removeMessage();
} catch (Exception e) {
Log.e(LocationService.class.getSimpleName(), "Error", e);
}
}
}
}.start();
return (START_NOT_STICKY);
}
private void trackMe() {
lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, CommonConstants.GPS_POLL, CommonConstants.GPS_MIN_DIST,
this);
DeviceConfig.addValue(CommonConstants.GPS_STATE, lm.isProviderEnabled(LocationManager.GPS_PROVIDER)
? CommonConstants.ON : CommonConstants.OFF);
}
答案 0 :(得分:1)
您不需要反复注册/取消注册位置更新侦听器,似乎您的服务已停止,因此以粘性模式启动您的服务,这样,服务就可以只显式停止。
答案 1 :(得分:1)
如果您真的希望自己的服务继续运行,则需要将其作为前台服务(请参阅http://developer.android.com/reference/android/app/Service.html#startForeground(int,android.app.Notification))
但为什么不在每次位置更改时使用此http://developer.android.com/reference/android/location/LocationManager.html#requestLocationUpdates(long,float,android.location.Criteria,android.app.PendingIntent)来启动服务?
菲尔
答案 2 :(得分:0)
到目前为止,我正在这样做。
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,
CommonConstants.GPS_POLL,CommonConstants.GPS_MIN_DIST, pendingIntent);
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
CommonConstants.NW_POLL, CommonConstants.NW_MIN_DIST, pendingIntent);
如果您有更好的解决方案,请建议。