2012-03-07 5 views
1

をキャンセルする必要があります。アンドロイド - GPSの位置更新 - 私は何をしようとしているTimerTaskを

1)x分ごと

2ユーザの位置情報を更新します)は、Webを呼び出すためにタイマーとTimerTaskをを使用します何が起こっている最新の位置情報

記録サービス:

1)TimerTaskを、ユーザの電話が冬眠している場合) を作成している/ SL eeping、Webサービスの呼び出しは、ユーザーの電話がウェイクアップすると、キューに入れられたにTimerTasksのすべてが、その結果、すぐに実行TimerTaskをキュー

4)に格納なっているように見える)

3を動作しません。 Webサービス

に対して複数の不要な位置情報の更新にここでコードスニペットです:

timer.scheduleAtFixedRate(new TimerTask() { 
@Override 
public void run() { 

    try 
    { 
     //validate that the device has an active & working connection 
     ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetwork = connMgr.getActiveNetworkInfo(); 

     //validate the the device network provider is enabled 
     if ((eview_locationManagerwifi 
       .isProviderEnabled(LocationManager.NETWORK_PROVIDER)) && (activeNetwork != null && activeNetwork.getState() == NetworkInfo.State.CONNECTED)) 
     { 
       UpdateSubscriberLocation(); // call the web service to report location data             
     } 
     else 
     { 
      this.cancel(); 
     } 
    } 
    catch (Exception e) 
    { 


    } 

TimerTaskをにはないので、ネットワーク接続とプロバイダに対応しているチェックは明らかに「真」を返すの両方でありますゲキャンセルされると、ユーザーの電話機が起動するまで待ち行列に入れられます。

Webサービスからの応答なしで一定の時間が経過した場合、どのようにTimerTaskをキャンセルできますか? TimerTaskで一種の "setTimeout"メソッドを見つけることができませんでした。

答えて

0

TimerTaskを使用しないで、LocationManager.requestLocationUpdates()を使用してください。これはTimerTaskのようなものではなく、コードをかなり単純化します。また、ユーザーの場所が変更されない場合でも作業を回避するという追加の利点があります。

+0

を私がTimerTaskを使用する方法を見つけることができれば、それは素晴らしいことです - 定期的に(ユーザーが決めた)このコードを実行する必要があるため、私はこのコードを使用しています。変更することができますが、Timer/TimerTaskの組み合わせを使用せずに、定期的にスケジュールされた間隔でコードが実行されることを確認するにはどうすればいいですか? – JMax2012

+0

実際には答えが見つかった可能性があります。間違いないのですか?そうすればアプリが起動したときにこのメソッドを呼び出すと、xミリ秒ごとに起動する必要があります。 – JMax2012

+0

requestLocationUpdatesの時間間隔は、ロケーションマネージャのヒントに過ぎません。場所が少なくなったり、場所が増えたり、デバイスが休止してもそれ以上のアップデートはありません。 – Stefan

0

高速アップデートが必要な場合は、デバイスがCPUをシャットダウンしないように、WakeLockを使用してください。詳細はこちらをご覧ください:http://developer.android.com/reference/android/os/PowerManager.html

あなたは、アラームが起動される場合は、要求位置更新を他のすべての分はAlarmManagerを使用すると言うことができます(高速の更新を必要とするデータを送信し、次のアラーム設定しない場合:。http://developer.android.com/reference/android/app/AlarmManager.html

+0

OPとコードスニペットを明確にするだけです。アップデートタスクは、ユーザーが設定した内容に基づいて、通常は15分ごとまたは30分ごとにユーザー定義の設定に基づいて起動する必要があります。 – JMax2012

+0

LocationManagerServiceにPARTIAL_WAKE_LOCKが含まれているため、アプリにその情報を含める必要はありません。 – jsmith

関連する問題