通知收到android后点亮屏幕

Pir*_*ate 25 notifications android screen wakeup wakelock

我有一个服务运行我的应用程序每小时发送通知.由于我的通知,我每小时都听到声音和振动,但工作正常,但我也希望我的通知也会点亮我的屏幕.但是当出现通知时,我无法点亮我的屏幕.

Pra*_*dhi 50

PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
boolean isScreenOn = pm.isScreenOn();
Log.e("screen on.................................", ""+isScreenOn);
if(isScreenOn==false)
{
    WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK |PowerManager.ACQUIRE_CAUSES_WAKEUP |PowerManager.ON_AFTER_RELEASE,"MyLock");
    wl.acquire(10000);
    WakeLock wl_cpu = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"MyCpuLock");

    wl_cpu.acquire(10000);
}
Run Code Online (Sandbox Code Playgroud)

  • 你需要清单中的WakeLock权限:<uses-permission android:name ="android.permission.WAKE_LOCK"/> (9认同)
  • FULL_WAKE_LOCK现已弃用.有什么用呢? (3认同)
  • FULL_WAKE_LOCK 已弃用。请改用 PARTIAL_WAKE_LOCK。 (3认同)
  • 在API级别20中弃用了isScreenOn()。请改用isInteractive()。 (2认同)
  • `PARTIAL_WAKE_LOCK` 不会自行唤醒设备,并且 [Android 文档状态](https://developer.android.com/reference/android/os/PowerManager#ACQUIRE_CAUSES_WAKEUP) 它不能与 `ACQUIRE_CAUSES_WAKEUP` 一起使用 (2认同)

Jan*_*vec 5

有我的解决方案:

createNotification(); //your implementation
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
boolean isScreenOn = Build.VERSION.SDK_INT >= 20 ? pm.isInteractive() : pm.isScreenOn(); // check if screen is on
if (!isScreenOn) {
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "myApp:notificationLock");
    wl.acquire(3000); //set your time in milliseconds
}
Run Code Online (Sandbox Code Playgroud)

电源管理器中的更多信息

  • 我需要像``wl.release()```那样释放唤醒锁吗? (2认同)