【问题标题】:Light up screen when notification received android收到通知时点亮屏幕android
【发布时间】:2012-03-09 09:42:11
【问题描述】:

我的应用程序正在运行一项服务,每小时发送一次通知。这工作正常,因为我的通知每小时都会听到声音和振动,但我也希望我的通知也能点亮我的屏幕。但是出现通知时我无法点亮屏幕。

【问题讨论】:

    标签: android notifications screen wakelock wakeup


    【解决方案1】:
    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);
    }
    

    【讨论】:

    • FULL_WAKE_LOCK 现已弃用。有什么用?
    • 你需要清单中的WakeLock权限:
    • isScreenOn() 在 API 级别 20 中已弃用。请改用 isInteractive()。
    • FULL_WAKE_LOCK 已弃用。请改用 PARTIAL_WAKE_LOCK。
    • PARTIAL_WAKE_LOCK 不会自行唤醒设备,the Android docs state 不能与ACQUIRE_CAUSES_WAKEUP 一起使用
    【解决方案2】:

    有我的解决方案:

    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
    }
    

    更多PowerManager

    【讨论】:

    • 我需要像wl.release()一样释放唤醒锁吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多