去掉前台服务权限

This commit is contained in:
Lindong 2026-01-28 16:49:53 +08:00
parent b4a2bf3410
commit 1f07381e19
2 changed files with 21 additions and 81 deletions

View File

@ -6,11 +6,6 @@
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.VIBRATE"/>
<!-- 前台服务权限 -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
<!-- 网络权限(如果需要从网络获取通知内容) -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
@ -56,8 +51,7 @@
<service
android:name=".service.NotificationKeepAliveService"
android:enabled="true"
android:exported="false"
android:foregroundServiceType="specialUse" />
android:exported="false" />
</application>

View File

@ -1,18 +1,14 @@
package com.remax.notification.service
import android.app.Notification
import android.app.Service
import android.content.Context
import android.content.Intent
import android.os.Build
import android.os.Handler
import android.os.IBinder
import android.os.Looper
import com.remax.base.ext.KvLongDelegate
import com.remax.base.ext.canSendNotification
import com.remax.base.report.DataReportManager
import com.remax.notification.check.NotificationCheckController
import com.remax.notification.controller.NotificationTriggerController
import com.remax.notification.controller.NotificationTriggerController.triggerFixTimeNotification
import com.remax.notification.timing.NotificationTimingController
import com.remax.notification.utils.NotiLogger
@ -25,8 +21,7 @@ import com.remax.notification.utils.NotiLogger
class NotificationKeepAliveService : Service() {
companion object {
private val NOTIFICATION_ID = NotificationTriggerController.getResidentNotificationId()
// 默认15分钟 = 900秒
private const val DEFAULT_INTERVAL_SECONDS = 900L
@ -66,15 +61,11 @@ class NotificationKeepAliveService : Service() {
}
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
context.startForegroundService(intent)
} else {
context.startService(intent)
}
NotiLogger.d("启动保活服务,间隔: ${intervalSeconds}")
context.startService(intent)
NotiLogger.d("启动服务,间隔: ${intervalSeconds}")
} catch (e: Exception) {
DataReportManager.reportData("Notific_Show_Fail",mapOf("reason" to "alive_service_${e.message}"))
NotiLogger.e("启动保活服务失败", e)
NotiLogger.e("启动服务失败", e)
}
}
@ -128,15 +119,15 @@ class NotificationKeepAliveService : Service() {
ACTION_START_SERVICE -> {
intervalSeconds =
intent.getLongExtra(EXTRA_INTERVAL_SECONDS, defaultIntervalSeconds)
startForegroundService()
startRunning()
}
ACTION_STOP_SERVICE -> {
stopForegroundService()
stopRunning()
}
ACTION_UPDATE_NOTIFICATION -> {
updateForegroundNotification()
updateRunningNotification()
}
}
return START_STICKY // 服务被杀死后自动重启
@ -146,48 +137,34 @@ class NotificationKeepAliveService : Service() {
override fun onDestroy() {
super.onDestroy()
stopForegroundService()
stopRunning()
NotiLogger.d("保活服务销毁")
}
/**
* 启动前台服务
* 启动服务
*/
private fun startForegroundService() {
private fun startRunning() {
if (isServiceRunning) {
NotiLogger.d("保活服务已在运行中,刷新通知,间隔: ${intervalSeconds}")
NotiLogger.d("服务已在运行中,刷新通知,间隔: ${intervalSeconds}")
// 服务已运行,只刷新通知
updateForegroundNotification()
updateRunningNotification()
triggerFixTimeNotification()
return
}
// 检查通知权限
val hasNotificationPermission = canSendNotification()
NotiLogger.d("通知权限状态: $hasNotificationPermission")
if (!hasNotificationPermission) {
NotiLogger.w("没有通知权限,前台服务通知可能不会显示")
}
isServiceRunning = true
// 创建前台通知
val notification = createForegroundNotification()
// 启动前台服务
startForeground(NOTIFICATION_ID, notification)
// 启动定时任务
startKeepAliveTask()
NotiLogger.d("保活服务启动成功,间隔: ${intervalSeconds}")
NotiLogger.d("服务启动成功,间隔: ${intervalSeconds}")
}
/**
* 停止前台服务
* 停止服务
*/
private fun stopForegroundService() {
private fun stopRunning() {
if (!isServiceRunning) {
return
}
@ -197,16 +174,9 @@ class NotificationKeepAliveService : Service() {
// 停止定时任务
stopKeepAliveTask()
// 停止前台服务
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
stopForeground(STOP_FOREGROUND_REMOVE)
} else {
@Suppress("DEPRECATION")
stopForeground(true)
}
stopSelf()
NotiLogger.d("保活服务停止")
NotiLogger.d("服务停止")
}
/**
@ -224,7 +194,7 @@ class NotificationKeepAliveService : Service() {
try {
NotiLogger.d("执行保活任务")
DataReportManager.reportData("Notific_Pull", mapOf("topic" to "timer"))
updateForegroundNotification()
updateRunningNotification()
triggerFixTimeNotification()
// 尝试触发保活通知
NotificationTimingController.getInstance().triggerNotificationIfAllowed(
@ -259,34 +229,10 @@ class NotificationKeepAliveService : Service() {
}
/**
* 更新前台服务通知
* 更新服务通知
*/
private fun updateForegroundNotification() {
if (!isServiceRunning) {
NotiLogger.d("前台服务未运行,无法更新通知")
return
}
if (!canSendNotification()) {
NotiLogger.d("无通知权限,忽略本次更新通知")
return
}
try {
val newNotification = createForegroundNotification()
startForeground(NOTIFICATION_ID, newNotification)
NotiLogger.d("前台服务通知已更新")
} catch (e: Exception) {
NotiLogger.e("更新前台服务通知失败", e)
}
}
/**
* 创建前台通知
*/
private fun createForegroundNotification(): Notification {
// 使用NotificationTriggerController提供的构建函数
return NotificationTriggerController.buildResidentNotification(this)
private fun updateRunningNotification() {
// 不再需要更新前台通知
}
}