时间不停止

时间:2017-11-14 20:54:13

标签: android timertask

您好我一直在创建一个应用程序,用于检查手机是否使用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

1 个答案:

答案 0 :(得分:3)

每次收到广播消息时,都会创建BroadcastReceiver的新实例。因此,当您调用stopWIFITimer()时,实际上是在尝试停止一个永不启动的计时器,因为启动的计时器是BroadcastReceiver的另一个实例的对象。 所以,你应该把你的计时器移到其他地方。