您好我一直在创建一个应用程序,用于检查手机是否使用wifi或移动数据,使用timerTask通知用户并广播Receiver以检查WIFI或MOBILE DATA是否已打开。
即使我取消了timerTask,它也会转到错误通知,然后再次运行wifi通知。
我已经坚持这个问题好几个小时了,我决定寻求帮助。
这是我的MainActivity类:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public String getConnectivityStatus(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
String status = null;
if (null != activeNetwork) {
if(activeNetwork.getType() == ConnectivityManager.TYPE_WIFI)
status = "WIFI";
if(activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE)
status = "DATA";
}
else{
status = "ERROR";
}
return status;
}
这是我的NetworkChangeReceiver类:
public class NetworkChangeReceiver extends BroadcastReceiver {
//WIFI TIMER
public void startWIFITimer() {
wifiTimer = new Timer();
initializeWIFITimer();
wifiTimer.schedule(wifiTimerTask, 1000, 5000);
}
public void stopWIFITimer() {
if (wifiTimer != null) {
wifiTimer.cancel();
wifiTimer = null;
}
}
public void initializeWIFITimer() {
wifiTimerTask = new TimerTask() {
public void run() {
wifiHandler.post(new Runnable() {
public void run() {displayNotificationWIFI();
}
});
}
};
}
@Override
public void onReceive(Context context, final Intent intent) {
contexts = context.getApplicationContext();
String status = main.getConnectivityStatus(context);
if (status.contains("WIFI")){
startWIFITimer();
}
else if (status.contains("DATA")){]
}
else if (status.contains("ERROR")){
displayNotificationERROR();
stopWIFITimer();
}
}
如果有人决定进行投票,那么获得原因会更好。再次感谢您的任何帮助! :D
答案 0 :(得分:3)
每次收到广播消息时,都会创建BroadcastReceiver
的新实例。因此,当您调用stopWIFITimer()
时,实际上是在尝试停止一个永不启动的计时器,因为启动的计时器是BroadcastReceiver
的另一个实例的对象。
所以,你应该把你的计时器移到其他地方。