2

我目前正在为汽车驾驶员日志开发 GPS 跟踪应用程序(仅距离,不存储每个值或显示在 MapView 中)。对接电话的原因,我不在乎功耗。到目前为止,我的实现是一个调用 GPS-Helper 类的活动,该类正在获取 long/lat。活动本身计算行驶距离,将其显示给用户并启动一个通知栏,该栏也显示距离。为了使活动保持活动状态并且不被操作系统杀死,我正在使用 PARTIAL WakeLock 进行活动。

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

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

4

2 回答 2

1

当您单击通知时,您的问题可能与您正在启动的意图有关。这种意图很可能认为您想要启动一个全新的 Activity 而不是将旧的 Activity 返回到前台。

这个链接可以帮助你做你想做的事:

如何通过通知将 Android 现有活动置于最前面

于 2012-02-19T11:35:54.557 回答
0

您应该使用调用 startForground 的服务,该服务需要通知。此通知将是您返回应用程序的入口点。该服务可以在后台运行并记录坐标,而无需依赖于 Activity 的生命周期。

    @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

于 2015-03-10T14:58:42.087 回答