接收广播:
里面开启一个服务LongRunningService;
接收开机广播,也接收LongRunningService发出的广播。
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(FaceApplication.getContext(), LongRunningService.class);
i.putExtra("type",1);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
context.startForegroundService(i);
} else {
context.startService(i);
}
}
}
被开启的服务:
里面每5s发送一广播给AlarmReceiver
里面开线程执行自己想要干的任务(开启一个HTTP服务器)
public class LongRunningService extends Service {
private MyAppServer mywebserver;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
int type = intent.getIntExtra("type",1);
Log.d("[WebServer][LongRunnin]", "type :"+type);
if(type == 1){
createNotificationChannel();
}
new Thread(new Runnable() {
@Override
public void run() {
try {
//1.开启HTTP服务器
mywebserver = new MyAppServer(LongRunningService.this);
mywebserver.start();
Log.d("[WebServer][LongRunnin]", "WebServer start success");
} catch (IOException e) {
e.printStackTrace();
Log.d("[WebServer][LongRunnin]", "WebServer start failed"+ e.getMessage());
}
}
}).start();
AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
int anHour = 5*1000; // 这是一小时的毫秒数:60 * 60 * 1000
long triggerAtTime = SystemClock.elapsedRealtime() + anHour;
Intent i = new Intent(this, AlarmReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0);
manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, pi);
return super.onStartCommand(intent, flags, startId);
}
private void createNotificationChannel() {
Notification notification1 = new Notification.Builder(this).build();
startForeground(1, notification1);
}
@Override
public void onDestroy() {
super.onDestroy();
// if (mywebserver != null) {
// mywebserver.closeAllConnections();
// mywebserver = null;
// Log.e("onPause", "app pause, so web server close");
// }
}
}
清单文件注册开机广播:
<service android:name=".httptest.alarm.LongRunningService"></service>
<receiver android:name=".httptest.alarm.AlarmReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>