Android8.0 启动前台Service
程序员文章站
2022-03-11 18:31:40
...
1.启动Service
if(Build.VERSION.SDK_INT >=Build.VERSION_CODES.O){
startForegroundService(new Intent(this, BottomBarService.class));
}else {
startService(new Intent(this, BottomBarService.class));
}
2.在被启动Service中的onCreate方法调用
private void startNotificationForeground() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
String CHANNEL_ID = "NFCService";
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
NotificationChannel Channel = new NotificationChannel(CHANNEL_ID, "主服务", NotificationManager.IMPORTANCE_HIGH);
Channel.enableLights(true);//设置提示灯
Channel.setLightColor(Color.RED);//设置提示灯颜色
Channel.setShowBadge(true);//显示logo
Channel.setDescription("bottombar notification");//设置描述
Channel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC); //设置锁屏可见 VISIBILITY_PUBLIC=可见
if (manager != null) {
manager.createNotificationChannel(Channel);
}
Notification notification = new Notification.Builder(this)
.setChannelId(CHANNEL_ID)
.setAutoCancel(false)
.setContentTitle("主服务")//标题
.setContentText("运行中...")//内容
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher_home)//小图标一定需要设置,否则会报错(如果不设置它启动服务前台化不会报错,但是你会发现这个通知不会启动),如果是普通通知,不设置必然报错
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher_home))
.build();
startForeground(1, notification);//服务前台化只能使用startForeground()方法,不能使用 notificationManager.notify(1,notification); 这个只是启动通知使用的,使用这个方法你只需要等待几秒就会发现报错了
}
}
3.这样应用重新编译,Service即为前台服务,并且通知栏中显示服务通知!
推荐阅读
-
Android8.0 java.lang.IllegalStateException: Not allowed to start service Intent app is in background
-
docker.service启动失败:Unit not found的原因及解决办法
-
在ASP.NET Core中使用托管启动(hosting startup)程序集,实现批量注册service
-
android开发教程之开机启动服务service示例
-
Android Service的启动过程分析
-
Windows中通过命令行启动打开Service 管理工具
-
Linux系统Docker启动问题Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service"
-
解析Android中Service的启动过程时序图
-
Android中实现开机自动启动服务(service)实例
-
Redis的启动和关闭(前台启动和后台启动)