代码之家  ›  专栏  ›  技术社区  ›  Jason

PowerManager.newWakeLock()抛出非法LargumentException

  •  2
  • Jason  · 技术社区  · 15 年前

    PowerManager.newWakeLock() 我收到一个非法的异议。

    这是我用来获取

    private void setWakeLock(Context context)
    {
        PowerManager pm = (PowerManager) context
        .getSystemService(Context.POWER_SERVICE);
        SoundAlarmActivity.WakeLock = pm.newWakeLock(
        PowerManager.ACQUIRE_CAUSES_WAKEUP
                | PowerManager.ON_AFTER_RELEASE, "Alarm");
        SoundAlarmActivity.WakeLock.acquire();
    }
    

    下面是日志:

    09-28 12:53:09.704: ERROR/AndroidRuntime(702): java.lang.IllegalArgumentException
    09-28 12:53:09.704: ERROR/AndroidRuntime(702):     at android.os.PowerManager$WakeLock.<init>(PowerManager.java:223)
    09-28 12:53:09.704: ERROR/AndroidRuntime(702):     at android.os.PowerManager.newWakeLock(PowerManager.java:365)
    
    2 回复  |  直到 12 年前
        1
  •  15
  •   Donal Rafferty    15 年前

    试试这个:

    private void setWakeLock(Context context)
    {
        PowerManager pm = (PowerManager) context
        .getSystemService(Context.POWER_SERVICE);
        SoundAlarmActivity.WakeLock = pm.newWakeLock(
        PowerManager.FULL_WAKE_LOCK |
            PowerManager.ACQUIRE_CAUSES_WAKEUP
                | PowerManager.ON_AFTER_RELEASE, "BusSnoozeAlarm");
        SoundAlarmActivity.WakeLock.acquire();
    }
    

    PowerManager.ACQUIRE\u导致\u唤醒不适用于部分唤醒锁定,因此在定义所需的唤醒锁定类型时,必须确保使用的是完全唤醒锁定。

        2
  •  8
  •   kiko283    11 年前

    你应该定义你想要什么样的唤醒锁。您给出的两个标志只是对级别的补充:

    [WakeLock level] Flag Value | CPU | Screen | Keyboard
    -----------------------------------------------------
    PARTIAL_WAKE_LOCK           | On* | Off    | Off
    SCREEN_DIM_WAKE_LOCK        | On  | Dim    | Off
    SCREEN_BRIGHT_WAKE_LOCK     | On  | Bright | Off
    FULL_WAKE_LOCK              | On  | Bright | Bright
    

    注:自API 17级起,除 PARTIAL_WAKE_LOCK ,不推荐使用其他唤醒锁级别,而应使用 LayoutParams.FLAG_KEEP_SCREEN_ON