前台服务是什么
前台服务(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();
// }