Android前台服务(foreground)的注册

Android前台服务的特点主要包括以下几个方面:

  1. 持续运行任务:前台服务允许在后台执行长时间运行的任务,而不会受到系统对后台任务的限制。例如,播放音乐、下载文件、进行定位更新等任务可以在前台服务中执行,并且能持续运行,即使应用程序处于后台或设备锁定状态。
  2. 用户可见性:前台服务通过显示一个可见的通知,将正在执行的任务展示给用户。这样,用户可以清楚地知道应用程序正在进行某些重要操作,并且可以通过通知与应用程序进行交互。这提高了用户对应用程序的可见性和控制权,让用户更好地理解和参与应用程序的运行。
  3. 状态栏通知:前台服务通常会在状态栏显示一个通知,表明应用正在运行,并且用户可以随时看到。这个通知可能包含有关服务当前状态的信息,如当前播放的音乐曲目或下载进度。
  4. 优先级较高:与后台服务相比,前台服务的优先级较高。这意味着在系统内存不足的情况下,前台服务更不容易被系统回收,从而保证了服务的稳定性和可靠性。
  5. 需要权限:前台服务需要特定的权限才能运行,例如FOREGROUND_SERVICE权限。这是为了确保应用程序在请求前台服务时具有足够的权限和合法性。

接下来我来讲述一下怎么申请添加一个前台Service

首先,你得有一个Service,它的添加的方式很简单,但是需要注意一个地方,高版本Android需要在代码中添加申请,同时也得在manifest文件中添加相应的权限

    <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>

添加完毕后我们需要在Service中的onCreat方法中添加代码的申请,虽然不添加也可以正常显示,但是为了防止bug,还是添加好一点

    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG, "onCreate: ");
        //申请前台服务
        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){   //判断版本
            NotificationChannel channel = new NotificationChannel("channel_id","通知",notificationManager.IMPORTANCE_DEFAULT);
            notificationManager.createNotificationChannel(channel);
        }

        //创建通知
        Notification notification = new NotificationCompat.Builder(this, "channel_id")
                .setSmallIcon(R.drawable.ic_android_black_24dp)
                .setContentTitle("这是通知标题")
                .setContentText("这是通知内容")
                .setPriority(NotificationCompat.PRIORITY_DEFAULT) // Ensure priority is set
                .build();
        startForeground(1, notification);
    }

这里链式调用的第四行代码是优先级设置

.setPriority(NotificationCompat.PRIORITY_DEFAULT) // Ensure priority is set

这里,PRIORITY_DEFAULTNotificationCompat类中的一个静态常量,表示通知的默认优先级。

Android定义了几个不同的优先级级别,从最低到最高分别是:

  • PRIORITY_MIN
  • PRIORITY_LOW
  • PRIORITY_DEFAULT
  • PRIORITY_HIGH
  • PRIORITY_MAX

这些优先级级别影响通知在用户界面中的显示方式,例如在状态栏中的可见性、声音和振动等。例如,一个高优先级的通知(PRIORITY_HIGHPRIORITY_MAX)可能会更吸引用户的注意,因为它可能会发出声音、振动,或者在状态栏中显示一个更明显的图标。

渠道ID(Channel ID)在Android通知系统中的作用非常重要,主要体现在以下几个方面:

  1. 通知分类管理:渠道ID用于标识和区分不同类型的通知。在Android 8.0(API级别26)及更高版本中,开发者可以根据通知的性质将其分配到不同的通知渠道。例如,一个应用可能有消息通知、促销通知、系统更新通知等,每种都可以配置为一个独立的通知渠道,并赋予一个唯一的渠道ID。

  2. 用户个性化设置:渠道ID使得用户能够针对每个通知渠道进行个性化设置。在Android系统设置中,用户可以访问专门的界面来管理应用的通知渠道。通过渠道ID,用户可以开启或关闭特定的通知渠道,也可以调整通知的行为,如声音、震动、显示在锁屏上等。这种个性化设置有助于用户更好地控制和管理通知,减少被无关紧要的通知打扰的情况。

  3. 通知重要性级别:渠道ID还与通知的重要性级别相关联。通过为每个通知渠道设置不同的重要性级别(如IMPORTANCE_HIGHIMPORTANCE_DEFAULTIMPORTANCE_LOW等),开发者可以决定通知的展示方式。高重要性的通知可能会以弹出窗口的形式出现,而低重要性的通知可能只在状态栏中静默展示。这有助于用户根据通知的重要性来分配注意力和资源。

  4. 提升用户体验:通过允许用户根据渠道ID来定制通知的行为和展示方式,Android系统提供了更好的用户体验。用户可以根据自己的需求和偏好来设置通知,从而更加高效地处理和管理通知。同时,通知渠道也为开发者提供了更多的灵活性,可以根据应用的特性和需求来配置通知的行为和展示方式。

  5. 系统一致性:通知渠道为所有应用程序提供了一个统一的界面和体验。通过使用渠道ID来标识和管理通知渠道,Android系统确保了用户在不同应用程序之间具有一致的通知管理体验。这有助于用户更好地理解如何管理不同应用的通知,并提升整体的用户满意度。

        startForeground(1, notification);

这里的链式调用前面的1是整数id

startForeground(int id, Notification notification)方法中,整数ID(通常被称为notificationId是用于唯一标识前台服务关联的通知的。这个ID在多个方面都是有用的:

  1. 区分不同的通知:如果你的应用可能同时运行多个前台服务(虽然这通常不是推荐的做法),或者你可能希望在不同的上下文中显示不同的前台服务通知,那么你可以使用不同的notificationId来区分它们。

  2. 更新或取消通知:如果你需要更新或取消前台服务的通知(例如,当服务状态改变时),你可以使用相同的notificationId来执行这些操作。通过调用NotificationManagernotify(int id, Notification notification)方法,你可以更新一个已存在的通知。同样,通过调用cancel(int id)cancelAll()方法,你可以取消一个或所有通知。

  3. 管理资源:在内部,Android系统可能会使用这个ID来管理通知的资源。虽然这不是开发者直接关心的,但知道这个ID在系统中是唯一的并且被用来识别特定的通知是有帮助的。

  4. 日志和调试:在开发和调试过程中,如果你需要跟踪或识别特定的通知,那么知道其notificationId可能是有用的。

好了就讲这么多,像音乐播放器那种可交互的前台服务,后面写.....

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值