在我们的应用程序中,我们希望在通知到达时唤醒屏幕。此通知逻辑将投入使用。我们尝试使用“PARTIAL_WAKE_LOCK”,但这不起作用。 我们还尝试了“FULL_WAKE_LOCK”,它可以工作,但由于它已被弃用,我们无法在产品应用程序中使用它。 我们已经看到了“PARTIAL_WAKE_LOCK”的替代方案,例如“turnScreenOn”,但这不能从服务中使用。
我的问题是,当设备收到通知时,我们是否有其他替代方法可以通过消息传递服务打开屏幕?
或者, 我们在设备上设置了手动启用唤醒锁,对吧? (设置->显示->锁定屏幕->通知唤醒屏幕。) 我们可以通过某种编程方式直接从应用程序打开此设置页面吗?
请做需要的事情。
我最近在我的项目中已经解决了类似的问题。
首先确保您已在清单中添加此权限。
<uses-permission android:name="android.permission.WAKE_LOCK" />
完成后,现在只需在 FCM 服务类 onMessageReceived 方法中调用此代码即可。
private fun wakeApp() {
val pm = applicationContext.getSystemService(POWER_SERVICE) as PowerManager
val screenIsOn = pm.isInteractive // check if screen is on
if (!screenIsOn) {
val wakeLockTag = packageName + "WAKELOCK"
val wakeLock = pm.newWakeLock(
PowerManager.FULL_WAKE_LOCK or
PowerManager.ACQUIRE_CAUSES_WAKEUP or
PowerManager.ON_AFTER_RELEASE, wakeLockTag
)
//acquire will turn on the display
wakeLock.acquire()
//release will release the lock from CPU, in case of that, screen will go back to sleep mode in defined time bt device settings
wakeLock.release()
}
}
您可以在 onPause 和 onResume 中使用 aquire 和 release 使其正常工作。