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

设置前台服务 (将后台服务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));
        }
        }
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Android 8.0 及以上版本,为了增强应用程序的安全性,Android 引入了后台限制,禁止未在前台运行的应用程序启动服务。如果您想在后台启动服务,需要使用 `startForegroundService()` 方法。这个方法会启动一个前台服务,然后你可以在服务启动后在通知栏显示一个通知,以此来告知用户服务正在运行。 以下是一个使用 `startForegroundService()` 的示例代码: ``` if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // 创建一个 NotificationChannel NotificationChannel channel = new NotificationChannel("channel_id", "channel_name", NotificationManager.IMPORTANCE_DEFAULT); // 向系统注册 NotificationChannel NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.createNotificationChannel(channel); } // 创建一个 Intent,启动你的服务 Intent serviceIntent = new Intent(this, YourService.class); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // 在 Android 8.0 及以上版本上,需要调用 startForegroundService() 方法启动服务。 startForegroundService(serviceIntent); } else { // 在 Android 8.0 以下版本上,可以直接调用 startService() 方法启动服务。 startService(serviceIntent); } ``` 注意:如果你使用的是 `startForeground()` 方法,会在 Android 8.0 及以上版本上抛出 `IllegalStateException` 异常,因为 Android 8.0 及以上版本禁止在后台启动服务

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

倚肆

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

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

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

打赏作者

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

抵扣说明:

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

余额充值