2012-02-19 151 views
2

我目前正在开发GPS追踪应用程序(只有距离,不存储每个值或在MapView中显示)的汽车司机日志。 停靠手机的原因,我不在乎功耗。 到目前为止,我的实现是一个调用GPS-Helper类的活动,该类获取long/lat。 活动本身计算驱动距离,为用户显示它并启动一个通知栏,该通知栏还显示距离。为了使活动保持活动状态并且不被操作系统杀死,我正在使用PARTIAL WakeLock进行活动。GPS跟踪应用程序(策略)

我的问题是,这是不正常工作,导致我的应用程序似乎被操作系统杀死,尽管WakeLock。我认为它被杀死了,因为当我点击通知栏项目(例如15-30分钟后)以查看我正在运行的活动中的驾驶距离时,活动显示为启动新的GPS轨道而不是显示从以前开始的轨道的驱动距离。 在清单中正确设置了WAKELOCK权限。

我现在的问题是要知道这个结构是否可以工作还是有更好的方法来做到这一点?

回答

1

您的问题可能与您在点击通知时启动的意图有关。这个意图很可能是因为你想要推出一个全新的活动,而不是将旧的活动返回到前台。

此链接可以帮助你做你想做的:

How to bring Android existing activity to front via notification

+0

嗯,我想用“singleTOP”的清单中的声明认为这将是没有问题的,以获得活动。不过,我已设置“toLaunch .setAction(”android.intent.action.MAIN“);” &“toLaunch .addCategory(”android.intent.category.LAUNCHER“);”我的通知没有成功。 – venni 2012-02-19 12:50:10

+0

我还发现,GPS-Helper类中的GPS-Listener也停止工作,导致通知栏中的GPS信号被关闭。我不知道这是否是由OS关闭我的活动或关闭GPS-Listener类的原因。如果我的活动保持在后台,它会每秒钟调用GPS-Helper类。这真让我抓狂。 可能是我完全在错误的路上?... – venni 2012-02-19 12:53:33

+0

这听起来像你正在做一切从活动。我认为一个服务将是更好的方式去做这个不断更新的通知。我不确定您是否可以动态地将额外功能添加到保留数据的意图中,并稍后在活动中提取它。 – pandavid87 2012-02-19 20:56:51

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