Android8.0 启动 Service 的方法
程序员文章站
2024-02-29 18:36:16
...
Android8.0 开始系统后台的管理更严了,启动 Service 和之前比会复杂些。而且不再是后台 Service 而是前台 Service,目的应该是为了让用户知道此时有 Service 正在运行。
另外貌似一旦创建了一个 NotificationChannel,那这个 NotificationChannel 就会一直存在,即便删除了相关代码
创建 NotificationChannel 的步骤,你可以把它写在 Application 中:
//需要创建 NotificationChannel
private void createNotificationChannel(){
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//判断是不是 Android8.0
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
NotificationChannel channel = new NotificationChannel(
//字符串类型的 Channel id
CHANNEL_ID,
//字符串类型的 Channel name
CHANNEL_NAME,
NotificationManager.IMPORTANCE_DEFAULT);
manager.createNotificationChannel(channel);
}
}
启动 Service 的方法:
Intent i = new Intent(context, MyService.class);
context.startForegroundService(i);
在 Service 中的处理:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
Notification notification = new Notification.Builder(this, Constants.CHANGE_VOLUME_CHANNEL_ID).
setContentTitle("Service正在后台运行").
setSmallIcon(R.drawable.icon_check).
build();
startForeground(1,notification);
}
return super.onStartCommand(intent, flags, startId);
}
这些写完后在运行 App,启动 Service 后,就会在通知了上常驻一个通知,显示“Service正在后台运行”,直至 Service 销毁。
如果不想希望常驻通知,你可以试试 IntentService,使用方法和Service一样,我不太确定是不是真的不会常驻通知,但在我的项目中是没有常驻通知的。
有疑问和建议请告诉我哦????
上一篇: JDK1.8时间工具类
推荐阅读
-
Android8.0 启动 Service 的方法
-
spring根据controller中接收请求参数不同走不同service的实现方法
-
SpringBoot应用部署到Tomcat中无法启动的解决方法
-
mysql启动服务报1058错误的解决方法
-
SpringBoot+jsp项目启动出现404的解决方法
-
Android实现Activity、Service与Broadcaster三大组件之间互相调用的方法详解
-
springBoot项目启动类启动无法访问的解决方法
-
安装MySQL在最后的start service停住了解决方法
-
详解Android中Service服务的基础知识及编写方法
-
解决Mysql服务器启动时报错问题的方法