前言
google在更新Android8.0后对Service的权限越发收紧。导致目前想要启动服务必需实现服务的前台化(否则在服务启动5秒后,系统将自动报错)。下面我们就来看看如何在8.0上启动服务。
看看8.0之前的版本怎么启动Service
在看8.0启动服务的方法之前,我们先看看8.0之前是怎么启动服务的。这样可以对比,也可以理解增加了那些部分。
1.在Activity启动服务:
Intent intent = new Intent(MainActivity.this,MainService.class);
startService(intent);
8.0之前是使用startService 直接启动服务的。后续服务就可以在后台运行了
2.将服务前台化:
虽然8.0之前如果没有明确需求,是可以不需要让服务前台化通知栏显示的,但是我们为了对比实现下8.0之前的服务前台化。
复制代码
public void onCreate() {
super.onCreate();
Notification notification = new Notification.Builder(this)
.setContentTitle(“主服务”)//设置标题
.setContentText(“运行中…”)//设置内容
.setWhen(System.currentTimeMillis())//设置创建时间
.setSmallIcon(R.mipmap.ic_launcher)//设置状态栏图标
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))//设置通知栏图标
.build();
startForeground(1,notification);
}
复制代码
可以服务启动后,可以在服务的onCreate()里直接实现服务前台化。
8.0版本怎么启动Service
1.在Activity里启动服务
Intent intent = new Intent(MainActivity.this,MainService.class);
startForegroundService(intent);
可以看到启动的方法变成了startForegroundService();
2.创建8.0版本必需实现的服务前台化
复制代码
private static final String CHANNEL_ID = “NFCService”;
public void onCreate() {
super.onCreate();
NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
Notificati