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:真
- 看門狗服務:啓動定時器....
因此,看門狗報告一個完全可用的網絡連接,但我的網絡連接接收器從未收到該消息。
有趣的是,我沒有考慮到這一點。我已經輸入了額外的日誌記錄,並且它們在最後一次「連接丟失」消息和看門狗通知網絡回來(這意味着消息被遺漏)之間從未激活過。但是,這些日誌記錄在接收器中會稍微低一點,所以有可能接收器被調用,但是電話立即休眠。我一定會嘗試這個,因爲這是我遇到的第一個新的可能性。 – Rob