在每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>