fix: turnOn 加 ACQUIRE_CAUSES_WAKEUP 强制唤醒屏幕
FISE广播在屏幕休眠时无法唤醒屏幕硬件(实测验证)。 改为双重机制: 1. WakeLock(FULL+ACQUIRE_CAUSES_WAKEUP+ON_AFTER_RELEASE) 强制唤醒 2. FISE广播同步ROM状态 WakeLock持有3秒后自动释放,释放后由系统超时管理。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -10,7 +10,12 @@ import javax.inject.Singleton
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* FISE 定制 ROM 屏幕控制实现
|
* FISE 定制 ROM 屏幕控制实现
|
||||||
* 通过系统广播控制亮屏/熄屏(FISE ROM 特有)
|
* 通过系统广播 + WakeLock 控制亮屏/熄屏
|
||||||
|
*
|
||||||
|
* 亮屏使用双重机制:
|
||||||
|
* 1. ACQUIRE_CAUSES_WAKEUP WakeLock — 强制唤醒屏幕硬件(Android 标准方式)
|
||||||
|
* 2. FISE ROM 广播 — 确保 ROM 层面也同步
|
||||||
|
* 仅靠 FISE 广播在屏幕休眠时无法唤醒(实测验证)
|
||||||
*/
|
*/
|
||||||
@Singleton
|
@Singleton
|
||||||
class FiseScreenController @Inject constructor(
|
class FiseScreenController @Inject constructor(
|
||||||
@@ -22,17 +27,39 @@ class FiseScreenController @Inject constructor(
|
|||||||
private const val ACTION_SCREEN_ON = "com.fise.turn_screen_on"
|
private const val ACTION_SCREEN_ON = "com.fise.turn_screen_on"
|
||||||
/** FISE ROM 熄屏广播 */
|
/** FISE ROM 熄屏广播 */
|
||||||
private const val ACTION_SCREEN_OFF = "com.fise.turn_screen_off"
|
private const val ACTION_SCREEN_OFF = "com.fise.turn_screen_off"
|
||||||
|
/** 唤醒 WakeLock 持有时间(毫秒),持有后自动释放 */
|
||||||
|
private const val WAKE_LOCK_TIMEOUT_MS = 3000L
|
||||||
|
/** WakeLock tag */
|
||||||
|
private const val WAKE_LOCK_TAG = "xqwatch:screen_wake"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val powerManager = context.getSystemService(Context.POWER_SERVICE) as PowerManager
|
||||||
|
|
||||||
/** 获取屏幕是否亮着(通过 PowerManager 标准 API) */
|
/** 获取屏幕是否亮着(通过 PowerManager 标准 API) */
|
||||||
override fun isScreenOn(): Boolean {
|
override fun isScreenOn(): Boolean {
|
||||||
val pm = context.getSystemService(Context.POWER_SERVICE) as PowerManager
|
return powerManager.isScreenOn
|
||||||
return pm.isScreenOn
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 亮屏:发送 FISE ROM 自定义广播 */
|
/**
|
||||||
|
* 亮屏:WakeLock 唤醒硬件 + FISE 广播同步 ROM 状态
|
||||||
|
* ACQUIRE_CAUSES_WAKEUP: 即使屏幕休眠也强制点亮
|
||||||
|
* ON_AFTER_RELEASE: 释放后按系统超时计时(不立即灭)
|
||||||
|
*/
|
||||||
|
@Suppress("DEPRECATION") // FULL_WAKE_LOCK 在 API 27 上仍有效
|
||||||
override fun turnOn() {
|
override fun turnOn() {
|
||||||
Timber.d("屏幕控制: 亮屏")
|
Timber.d("屏幕控制: 亮屏")
|
||||||
|
// 屏幕休眠时需要 WakeLock 强制唤醒硬件
|
||||||
|
if (!powerManager.isScreenOn) {
|
||||||
|
val wakeLock = powerManager.newWakeLock(
|
||||||
|
PowerManager.FULL_WAKE_LOCK
|
||||||
|
or PowerManager.ACQUIRE_CAUSES_WAKEUP
|
||||||
|
or PowerManager.ON_AFTER_RELEASE,
|
||||||
|
WAKE_LOCK_TAG
|
||||||
|
)
|
||||||
|
wakeLock.acquire(WAKE_LOCK_TIMEOUT_MS)
|
||||||
|
Timber.d("屏幕控制: WakeLock 唤醒(${WAKE_LOCK_TIMEOUT_MS}ms后自动释放)")
|
||||||
|
}
|
||||||
|
// FISE 广播确保 ROM 层面同步
|
||||||
context.sendBroadcast(Intent(ACTION_SCREEN_ON))
|
context.sendBroadcast(Intent(ACTION_SCREEN_ON))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user