Android 8.0 有一项复杂功能;系统不允许后台应用创建后台服务。 因此,Android 8.0 引入了一种全新的方法,即 Context.startForegroundService(),以在前台启动新服务。
1、
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
2、 Intent mIntent = new Intent(this,XXXService.class); if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.O) { startForegroundService(mIntent); }
3、
public void onCreate() {
startForeground(910888,buildForegroundNotification());
}
4、
private Notification buildForegroundNotification() {
String CHANNEL_ID = "download_app_state";
String CHANNEL_NAME = "down_state";
NotificationChannel mNotificationChannel = null;
Notification.Builder builder = null;
//O之后要使用NotificationChannel
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
mNotificationChannel = new NotificationChannel(CHANNEL_ID,CHANNEL_NAME,
NotificationManager.IMPORTANCE_HIGH);
builder = new Notification.Builder(this,CHANNEL_ID);
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
mNotificationManager.createNotificationChannel(mNotificationChannel);
}
builder.setOngoing(true);
builder.setContentTitle(getString(R.string.app_label))
.setContentText(getString(R.string.app_label))
.setSmallIcon(R.mipmap.ic_launcher_calendar)
.setTicker(getString(R.string.no_title_label))
.setPriority(Notification.PRIORITY_MAX)
.setAutoCancel(true);
return builder.build();
}