안녕하세요 저는 와이파이 또는 모바일 데이터가 열려 있는지 확인하기 위해 timerTask를 사용하여 사용자와 브로드 캐스트 수신기에 알리기 위해 휴대 전화가 wifi 또는 모바일 데이터를 사용하는지 확인하는 앱을 만들었습니다.Timertask not stopped
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();
}
}
그리고 누군가 downvote하기로 결정하면, 이유를 얻을 것이 좋을 것이다. 어떤 도움을 주셔서 다시 한번 감사드립니다! : D
통찰력을 가져 주셔서 감사합니다. 저는 필요에 맞게 서비스로 전환했습니다. 왜 그런 짓을했는지 설명해 주셔서 감사합니다! –