您如何在不使用广播管理器的情况下检查Intertnet或每10分钟一次



在每10次汇总后,我想检查Internet是否关闭或开启。如果我想在内部保存数据时,我想在内部保存数据时将数据发送到服务器。

使用broadcastreceiver是一种更好的方法,因为它可以帮助您节省设备资源。但是,如果您愿意选择替代方案,则可以尝试以下代码:

private int duration = 10 * 60 * 1000; //for 10 minutes
@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
   handler = new Handler();
   handler.postDelayed(networkCheckRunnable,duration);
}
Runnable networkCheckRunnable = new Runnable() {
   @Override
   public void run() {
     ConnectivityManager manager = (ConnectivityManager) getApplicationContext().getSystemService(CONNECTIVITY_SERVICE);
     NetworkInfo info = manager.getActiveNetworkInfo();
     if(info!=null && info.isConnected()){
        //your logic when network is connected
     }else{
        //your logic when network is not connected
     }
     handler.postDelayed(networkCheckRunnable,duration);
   }
};
public class AlarmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Intent background = new Intent(context, BackgroundService.class);
        context.startService(background);
    }
}

上面的代码是我们的广播接收器。每次称为我们的背景服务时,都会执行。

那么,我们如何使广播接收器能够从事Android的警报服务?这很容易,可以在以下代码中看到:

public class ExampleActivity extends Activity {
    private Context context;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        this.context = this;
        Intent alarm = new Intent(this.context, AlarmReceiver.class);
        boolean alarmRunning = (PendingIntent.getBroadcast(this.context, 0, alarm, PendingIntent.FLAG_NO_CREATE) != null);
        if(alarmRunning == false) {
            PendingIntent pendingIntent = PendingIntent.getBroadcast(this.context, 0, alarm, 0);
            AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
            alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 600000, pendingIntent);
        }
    }
}

上面的代码将准备我们的广播接收器,然后检查是否已经在运行。如果它已经运行,则无需执行任何操作,因为我们不想多次注册。如果接收器尚未运行,我们将注册它以重复每600000毫秒或每10分钟。

那么,广播接收器醒来时到底在做什么?它只是在打电话给我们的背景服务意图。

public class BackgroundService extends Service {
    private boolean isRunning;
    private Context context;
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    @Override
    public void onCreate() {
        this.context = this;
        this.isRunning = false;
        this.backgroundThread = new Thread(myTask);
    }
    private Runnable myTask = new Runnable() {
        public void run() {
            // Do something here
            stopSelf();
        }
    };
    @Override
    public void onDestroy() {
        this.isRunning = false;
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        if(!this.isRunning) {
            this.isRunning = true;
            this.backgroundThread.start();
        }
        return START_STICKY;
    }
}

androidmanifest.xml文件。必须将以下行添加到您的文件中:

<application>
    <service android:name=".BackgroundService" />
    <receiver android:name="AlarmReceiver"></receiver>
</application>

相关内容

最新更新