2011-07-13 19 views
0

定期的に呼び出されるサービスがあり、ネットワークエラーが発生した場合はネットワークの可用性をチェックし、利用可能なネットワークがない場合、そのサービスのアラームはキャンセルされます。その後、ネットワーク接続のブロードキャスト受信機を使用してネットワークの変更を監視し、ネットワークが再び利用可能になると、タイマーを再起動できるようにします。接続変更受信者がブロードキャストを失っているようです

ただし、予防措置として、サービスを実行する必要があるかどうかを確認して確認するために5分ごとに実行するウォッチドッグタイマーサービスも実行します。たとえば、タイマーが設定されておらず、ネットワークが利用可能である場合、タイマーに問題があることがわかります。

これは私が最近行ってきたことですが、ごくまれにあります。ウォッチドッグタイマーを守っている理由ですが、なぜアラームタイマーが再起動されなかったのかまだ分かりません。

ここでネットワーク受信機です:ここで

public class NetworkConnectivityReceiver extends BroadcastReceiver { 

    Context context; 

    @Override 
    public void onReceive(Context ctx, Intent intent) { 

     context = ctx; 

     WakeUpManager wakeUpMgr = new WakeUpManager(context); 

     if (wakeUpMgr.isWakeUpSet() == false) { 
      // Log all messages received while the wakeup is not set and it should be. 
      Log.d(TAG, "The timer is not set, and a network change message was received"); 
     } 

     // Check if the network is connected, and if so, then restart the timer 
    } 
} 

は、その受信機のマニフェストエントリです:

 <receiver android:name="com.mycom.receivers.NetworkConnectivityReceiver"> 
     <intent-filter> 
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
      <action android:name="android.net.ConnectivityManager.CONNECTIVITY_ACTION" /> 
     </intent-filter> 
     </receiver> 

私がすることで、ネットワークの可用性をチェック:

public static boolean isNetworkAvailable(Context context) { 
    ConnectivityManager mgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo info = mgr.getActiveNetworkInfo(); 
    if (info != null && info.isConnected()) { 
     return true; 
    } 
    else { 
     return false; 
    } 
} 

最後のメッセージは、私はログに表示されます:

タイマーが設定され、ネットワークが利用可能ではなかった
  • ネットワーク情報:接続:タイプ:モバイル利用可能:接続真:真ConnectedOrConnecting:真
  • ドッグ
    • はタイマーに
    • ウォッチドッグサービスをキャンセル、アクティブなネットワークがありませんサービス:開始タイマー....

    したがって、ウォッチドッグは完全に利用可能なネットワーク接続を報告していますが、ネットワーク接続受信者はそのメッセージを受信しませんでした。

  • 答えて

    0

    受信者の先頭にログを追加し、受信者がブロードキャストを取得したかどうかを確認します。受信機が放送を受信した場合、私はそれが目覚ましロックと関係があると思われるでしょう。あなたがデバイスをスリープ状態にする前に何をしなければならないかを確認するためにアラームをスケジュールし終わった後、onReceivedメソッドを入力してウェイクロックを解除し、ウェイクロックを解除してみてください。

    +0

    興味深いことに、私はそれを考慮していませんでした。追加のロギングステートメントを入れましたが、最後の「接続が失われました」メッセージと、ウォッチドッグがネットワークに戻ってきたとき(メッセージが欠落したことを意味します)の間でアクティブになることはありません。しかし、これらのロギングステートメントはレシーバーで少し下にあるので、レシーバーが呼び出される可能性がありますが、電話はすぐにスリープします。私が遭遇した最初の新しい可能性があるので、私は間違いなくこれを試みます。 – Rob

    関連する問題