package com.hdl.photovoltaic.uni; import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.Service; import android.content.Intent; import android.os.Build; import android.os.IBinder; import androidx.annotation.Nullable; import androidx.core.app.NotificationCompat; import com.hdl.photovoltaic.R; public class MyForegroundService extends Service { private static final String CHANNEL_ID = "MyForegroundServiceChannel"; private static final int NOTIFICATION_ID = 1; private static boolean isRunning = false; @Override public void onCreate() { super.onCreate(); // 创建通知渠道(Android 8.0+) createNotificationChannel(); isRunning = true; } @Override public int onStartCommand(Intent intent, int flags, int startId) { // 创建通知 Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID) .setContentTitle("")//宿主进程服务 .setContentText("")//正在与uni-app保持通信 .setSmallIcon(R.drawable.notification_logo) // 必须设置一个图标 .setPriority(NotificationCompat.PRIORITY_LOW) // .setOngoing(true) // 设置通知为持续通知,不可清除 // .setAutoCancel(false) // ← 设置为不可自动取消 // .setShowWhen(false) // 不显示时间 // .setOnlyAlertOnce(true) // 只提示一次 .build(); // 启动前台服务 startForeground(NOTIFICATION_ID, notification); // 如果服务被杀死,不再重新创建(重建:START_STICKY,不重建:START_NOT_STICKY) return START_NOT_STICKY; } private void createNotificationChannel() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationChannel serviceChannel = new NotificationChannel( CHANNEL_ID, getString(R.string.host_process_service_channel), NotificationManager.IMPORTANCE_LOW // 设置为低重要性,不会发出声音 ); // serviceChannel.setDescription("用于保持宿主进程运行"); NotificationManager manager = getSystemService(NotificationManager.class); manager.createNotificationChannel(serviceChannel); } } @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public void onDestroy() { super.onDestroy(); isRunning = false; } public static boolean isServiceRunning() { return isRunning; } }