在开发锁屏软件的过程中,会通过开启后台服务的方式保证进程随时接收到用户开屏广播,进而通过服务开启Window或启动Activity的方式实现锁屏界面展示,但是在Android8.0之后,Google会对后台服务进行控制,并禁止启动后台服务。提出通过startForegroundService() 启动前台服务。但是必须要配合在service 中调用Service.startForeground(),单纯的使用StartService()方式可能会导致程序崩溃(ANR 或者crash),废话不多说,解决方法如下所示(亲测可用):
1. 通过判断当前手机版本对服务启动进行区别对待,如下图:
2.对所启动Service进行通知处理(Google对Android8.0之后进行的强制处理),此方法需在Service的onCreate方法内调用,通知可根据个人需求对Notification进行属性设定,这里提供的是最简单的通知样式,仅仅包括图标和内容。
3.在AndroidManifest配置文件内,添加前台权限
<uses permission android:name="android.permission.FOREGROUND_SERVICE" />
至此,完美解决。