我目前正在研究GPS跟踪应用程序(只有距离,不存储每个值或在MapView中显示)用于汽车驾驶员日志。 停靠手机的原因,我不在乎耗电量。 到目前为止,我的实现是一个调用GPS-Helper类的活动,它正在获得long / lat。 活动本身计算驱动距离,为用户显示它并启动一个也显示距离的通知栏。为了使活动保持活动而不被操作系统杀死,我使用PARTIAL WakeLock进行活动。
我的问题是这不能正常工作,导致我的应用程序似乎被操作系统杀死,尽管WakeLock。我认为它已被杀死,因为当我点击通知栏项目(例如15-30分钟后)以查看我的运行活动中的行驶距离时,活动显示为启动新的GPS轨道而不是显示前一个开始轨道的驱动距离。 WAKELOCK权限在Manifest中正确设置。
我现在的问题是要知道这个结构是否有用或者有更好的方法吗?
答案 0 :(得分:1)
您的问题可能出在您点击通知时启动的意图中。这种意图很可能是您想要启动一个全新的Activity而不是将旧活动返回到前台。
此链接可以帮助您做您想做的事情:
How to bring Android existing activity to front via notification
答案 1 :(得分:0)
您应该使用调用startForground的服务,这需要通知。此通知将成为您返回应用的入口点。该服务可以在后台和日志坐标中运行,而不依赖于您的活动的生命周期。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if(intent.getAction().equals(DRIVELOG_ACTION_STOPLOGGING)){ handleStopLoggingCommand(intent.getBooleanExtra(SAVE_LOG,false));
}
else if(intent.getAction().equals(DRIVELOG_ACTION_STARTLOGGING)){
handleStartLoggingCommand();
}
return START_STICKY;
}
private void handleStartLoggingCommand() {
startForeground(DriveLoggerNotification.notificationId,DriveLoggerNotification.createInDriveLogNotification(this,driveLogLiveData));
if(googleApiClient.isConnected()){
startMonitoringLocation();
}else {
googleApiClient.connect();
}
}
此代码来自我的GpsLoggingService