Android四大组件之一服务(前台服务)

前台服务是什么

        前台服务(Foreground Service)是一种在 Android 应用中运行的服务类型,其目的是执行一些用户直接可见的任务,而不会被系统轻易终止。通常,前台服务会在状态栏显示一个通知,以表明应用正在运行,并且用户可以随时看到。

注意

  • 前台服务通常用于执行与用户交互的长时间运行的任务,如音乐播放器、导航应用等。
  • 前台服务在通知栏中显示通知,用户可以随时看到,因此它们应该提供有关服务当前状态的信息。
  • 前台服务需要权限,例如FOREGROUND_SERVICE权限。
       <!--前台服务-->
        <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

示例代码

/**
 * @ClassName ServiceForeground
 * @Description 前台服务
 * @Author ZMROBO
 * @Date 2023/12/27 15:13
 */
public class ServiceForeground  extends Service {
    private static final String TAG = ServiceForeground.class.getSimpleName();
     /**
      *  @description 通知渠道id
      */
    private final static String CHANNEL_ID = "CHANNEL_ID_1024";
     /**
      *  @description 通知的ID,用于标识通知
      */
    private static final int NOTIFICATION_ID = 1;

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        MlogUtil.d(TAG,"onStartCommand:执行服务逻辑,比如播发音乐导航等等");
        //Android 8以上
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            //创建通知渠道
            NotificationChannel channel = new NotificationChannel(
                    CHANNEL_ID,
                    "音乐",
                    NotificationManager.IMPORTANCE_DEFAULT
            );
            NotificationManager notificationManager = getSystemService(NotificationManager.class);
            notificationManager.createNotificationChannel(channel);
            //创建一个通知
            Notification notification = createNotification();
            //设置成前台服务
            startForeground(NOTIFICATION_ID, notification);
        }
        return super.onStartCommand(intent, flags, startId);
    }


    /**
     * @description PendingIntent的请求码
     */
    private final static int PD_ID = 12;
     /**
      *  @description 创建通知
      */
    private Notification createNotification() {

        Intent intent = new Intent(this, MainActivity.class);
        //FLAG_UPDATE_CURRENT PendingIntent改变时候更新到PendingIntent  PD_ID确保PendingIntent的请求码唯一的请求码
        PendingIntent pendingIntent = PendingIntent.getActivity(this, PD_ID, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        NotificationCompat.Builder builder
                = new NotificationCompat.Builder(this, CHANNEL_ID)
                .setContentTitle("音乐")
                .setContentText("音乐播放中")
                //小图标
                .setSmallIcon(R.mipmap.ic_launcher)
                //设置优先级
                .setPriority(NotificationCompat.PRIORITY_HIGH)
                //设置用户点击通知时启动的操作,通常是启动一个Activity或发送Broadcast。
                .setContentIntent(pendingIntent)
                /**
                 * .setSmallIcon(int icon):
                 *
                 * 设置通知的小图标,用于在状态栏和通知栏中显示。
                 * .setContentTitle(CharSequence title):
                 *
                 * 设置通知的标题,通常用于简明扼要地描述通知的主题。
                 * .setContentText(CharSequence text):
                 *
                 * 设置通知的内容,提供更详细的通知信息。
                 * .setLargeIcon(Bitmap icon):
                 *
                 * 设置通知的大图标,通常显示在通知的左侧。
                 * .setPriority(int pri):
                 *
                 * 设置通知的优先级,影响通知在用户界面上的显示方式。
                 * .setAutoCancel(boolean autoCancel):
                 *
                 * 设置通知在用户点击后自动取消。
                 * .setVibration(long[] pattern):
                 *
                 * 设置震动模式,用于在通知到达时振动设备。
                 * .setSound(Uri sound):
                 *
                 * 设置通知的声音,指定通知到达时播放的声音。
                 * .setContentIntent(PendingIntent intent):
                 *
                 * 设置用户点击通知时启动的操作,通常是启动一个Activity或发送Broadcast。
                 * .addAction(int icon, CharSequence title, PendingIntent intent):
                 *
                 * 添加一个操作按钮,允许在通知上添加用户可点击的操作。
                 * .setStyle(NotificationCompat.Style style):
                 *
                 * 设置通知的样式,例如 BigTextStyle 用于显示大段文本,BigPictureStyle 用于显示大图。
                 * .setTicker(CharSequence tickerText):
                 *
                 * 设置状态栏上显示的文本,当通知首次到达时显示。
                 * .setColor(int argb):
                 *
                 * 设置通知的颜色,影响通知在界面上的显示。
                 * .setLights(int argb, int onMs, int offMs):
                 *
                 * 设置 LED 灯的颜色和闪烁模式。
                 * .setOnlyAlertOnce(boolean onlyAlertOnce):
                 *
                 * 设置只在通知第一次出现时发出提示音。
                 * .setDefaults(int defaults):
                 *
                 * 设置通知的默认行为,例如默认声音、震动、闪光灯等。
                 * .setGroup(String groupKey):
                 *
                 * 将通知添加到通知组,以便以一组的形式显示。
                 */;
        return builder.build();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }
}

// 在 Activity 中启动前台服务的代码示例:
    // Intent serviceIntent = new Intent(this, MyForegroundService.class);
    // startService(serviceIntent);

    // 在 Activity 中停止前台服务的代码示例:
    // private void stopForegroundService() {
    //    stopForeground(true);
    //    stopSelf();
    // }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码划云

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

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

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

打赏作者

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

抵扣说明:

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

余额充值