2012-02-19 11 views
2

私は現在、車の運転日誌のためのApp(距離のみ、各値を格納するかのMapViewに表示されていない)を追跡するGPSに取り組んでいます。 ドッキングされた電話の原因、私は消費電力については気にしません。 これまでの実装は、GPS-Helperクラスを呼び出してlong/latを呼び出すアクティビティです。 アクティビティ自体が駆動距離を計算し、ユーザに表示し、距離を表示する通知バーを開始します。アクティビティをアクティブに保ち、OSによって殺されないように、私はそのアクティビティに対してPARTIAL WakeLockを使用しています。GPSのトラッキングアプリケーション(戦略)

私の問題は、これが私のアプリがWakeLockのOSのinspiteによって殺されているように見える原因となり、正常に動作していないということです。私はそれが殺されたと思う、私が実行中の活動の駆動距離を見るために通知バー項目を(例えば15-30分後)クリックすると、活動は新しいGPS-トラックを開始するように示される前に開始したトラックからの駆動距離を表示する代わりに、 WAKELOCK権限がマニフェストに正しく設定されています。今

私の質問は、このcostructが動作することができれば知って取得することですか、これを行うには良い方法はありますか?

答えて

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

+0

私が知りたことは、私のGPSヘルパークラスのGPSリスナーも動作を停止し、通知バーのGPS信号がオフになってしまったことです。これがOSからのシャットダウンやGPS-Listenerクラスのシャットダウンの原因であるかどうかはわかりません。私の活動がバックグラウンドにとどまると、毎秒GPS-Helperクラスが呼び出されます。これは私を夢中にさせている。 私は完全に間違った方向にいるかもしれませんか... ... – venni

+0

アクティビティからすべてをやっているようです。私は、この一定の更新を通知するためには、サービスがより良い方法になると思います。私はあなたがデータを保存し、それを後でアクティビティで抽出する意図に動的に追加できるかどうかはわかりません。 – pandavid87

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