安卓开发:2、设置前台服务 (将后台服务Service设置为前台服务 Service)

本文详细介绍了如何在Android中将后台Service设置为前台服务,包括在manifest中添加权限,创建通知渠道,设置通知内容,并在Service的onCreate()中启动前台服务。此外,还提供了在不同Android版本下启动前台服务的方法。通过这种方式,可以确保服务在后台持续运行,不受系统清理的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设置前台服务 (将后台服务Service设置为前台服务 Service)

首先在manifest中添加权限:在这里插入图片描述
接着第一步:在Service(自己编写的的继承于Sercive的类)中编写设置通知并开启前台服务的方法(函数),并调用,下面实例中设置通知方法是在onCreate()中调用的,下面实例前台化的服务类名为MediaService

private void setNotificationAndForeground() {
        //判断当前版本是否支持
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            String CHANNEL_ID = "MediaSevice";

            notificationChannel = new NotificationChannel(CHANNEL_ID, "主服务", NotificationManager.IMPORTANCE_HIGH);
            notificationChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC); //设置锁屏可见 VISIBILITY_PUBLIC=可见
            //Channel.enableLights(true);//设置提示灯
            //Channel.setLightColor(Color.RED);//设置提示灯颜色
            //Channel.setShowBadge(true);//显示logo
            //Channel.setDescription("MediaService notification");//设置描述
            
            notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
            notificationManager.createNotificationChannel(notificationChannel);

            notification = new Notification.Builder(this, CHANNEL_ID)
                    .setAutoCancel(false)
                    .setContentTitle("音乐")//标题
                    .setContentText("开启中……")//内容
                    .setSmallIcon(R.drawable.playing_dark_style)//不设置小图标通知不会显示,或将报错
                    //.setLargeIcon(R.drawable.playing_dark_style)
                    .build();
            startForeground(1, notification);//startForeground服务前台化,要在5秒内调用成功,否则前台化失败
        }
    }

在Service(自己编写的的继承于Sercive的类)中的onCreate()中调用setNotificationAndForeground()函数尝试设置通知并将Service设置为前台服务

    @Override
    public void onCreate() {
        Log.e("onCreate", "onCreate\n======================================================\n");
        super.onCreate();
        setNotificationAndForeground();
        //创建多媒体回调
        //mediaControllerInterface_xj.setOnMediaProgressBack_xj(this);
    }

第二步:在需要开启服务的地方开启前台服务

//判断当前版本是否支持前台服务,不支持则开启后台服务
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            startForegroundService(new Intent(getApplicationContext(), MediaService.class));
        }else {
            startService(new Intent(getApplicationContext(), MediaService.class));
        }
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倚肆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值