在AndroidManifest.xml中,添加以下代码,使应用程序免受最新更新影响:
在对应的Service类中,添加以下代码,以确保前台服务不会在内存清理时被杀死:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
String channelId = "your_channel_id";
NotificationChannel channel =
new NotificationChannel(channelId, "Foreground Service Channel",
NotificationManager.IMPORTANCE_HIGH);
((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE))
.createNotificationChannel(channel);
Notification notification = new NotificationCompat.Builder(this, channelId)
.setContentTitle(getString(R.string.app_name))
.setContentText(getString(R.string.notification_text))
.setSmallIcon(R.mipmap.ic_launcher)
.setOngoing(true)
.build();
serviceIntent = intent;
startForeground(1, notification);
return START_REDELIVER_INTENT;
} else {
return super.onStartCommand(intent, flags, startId);
}
}
@Override
public void onTaskRemoved(Intent rootIntent) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
Intent restartServiceIntent = new Intent(getApplicationContext(), this.getClass());
restartServiceIntent.setPackage(getPackageName());
PendingIntent restartServicePendingIntent =
PendingIntent.getService(getApplicationContext(), 1, restartServiceIntent,
PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmService =
(AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
if (alarmService != null) {
alarmService.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 1000,
restartServicePendingIntent);
}
super.onTaskRemoved(rootIntent);
}
}
以上代码的作用是在Android 10及更高版本上,将前台服务设置为具