2012-02-19 147 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