سلام مجدد؛
خب دوستان چون با Job نتونستم کارم رو پیش ببرم (هر چند گویا خیلی خوبه)، دست به دامان سرویس شدم. کدها به زیر تغییر کرده:
کلاس NetworkChangeReceiver
public class NetworkChangeReceiver extends BroadcastReceiver {
private Context mContext;
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onReceive(final Context context, final Intent intent) {
try {
boolean isVisible = AppController.isActivityVisible();// Check if
Log.i("Activity is Visible ", "Is activity visible : " + isVisible);
// If it is visible then trigger the task else do nothing
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager
.getActiveNetworkInfo();
// Check internet connection and accrding to state change the
// text of activity by calling method
if (networkInfo != null && networkInfo.isConnected()) {
Intent intent2 = new Intent(context, MyService.class);
context.startService(intent2);
} else {
Intent intent2 = new Intent(context, MyService.class);
context.stopService(intent2);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
و سرویس:
public class MyService extends Service {
AlarmManager alarm_manager;
PendingIntent pi;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//TODO do something useful
NextUpdate(intent);
return Service.START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
alarm_manager.cancel(pi);
stopSelf();
}
@Override
public IBinder onBind(Intent intent) {
throw new UnsupportedOperationException("Not yet implemented");
}
private void NextUpdate(Intent intent) {
alarm_manager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
Calendar cur_cal = Calendar.getInstance();
pi = PendingIntent.getService(this, 0, new Intent(this, MyService.class), 0);
alarm_manager.setRepeating(AlarmManager.RTC_WAKEUP , cur_cal.getTimeInMillis(), 6000, pi);
ConnectivityManager connectivityManager = (ConnectivityManager) this
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager
.getActiveNetworkInfo();
Toast.makeText(this,"i dont have net", Toast.LENGTH_LONG).show();
}
}
اما مشکلات:
اگر سرویس رو در حالی که برنامه باز هست اجرا کنم، بعد از بسته شدن برنامه هم به فعالیت خودش ادامه میده. اما با قطع/وصل شدن ارتباط دیتا وقتی که برنامه بسته هست تغییری در روند سرویس به واسطه کلاس NetworkChangeReceiver ایجاد نمیشه (هم سرویس و هم این کلاس رجیستر شدن در منیفست).
حالا مشکل از چی هست؟!