GPS跟踪应用程序(策略)

时间:2012-02-19 10:24:59

标签: android service gps tracking wakelock

我目前正在研究GPS跟踪应用程序(只有距离,不存储每个值或在MapView中显示)用于汽车驾驶员日志。 停靠手机的原因,我不在乎耗电量。 到目前为止,我的实现是一个调用GPS-Helper类的活动,它正在获得long / lat。 活动本身计算驱动距离,为用户显示它并启动一个也显示距离的通知栏。为了使活动保持活动而不被操作系统杀死,我使用PARTIAL WakeLock进行活动。

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

我现在的问题是要知道这个结构是否有用或者有更好的方法吗?

2 个答案:

答案 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