6

我在获取 WakeLock 时遇到问题。它似乎不起作用。我正在尝试获取 FULL_WAKE_LOCK,但既没有启用显示器,也没有我的应用程序能够执行任务。

我正在使用以下权限:android.permission.WAKE_LOCK

我的获取代码如下所示:

PowerManager pm = (PowerManager) getBaseContext().getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK|PowerManager.ACQUIRE_CAUSES_WAKEUP, "My Tag");
wl.acquire();

我究竟做错了什么?

编辑:添加了另一个标志 ACQUIRE_CAUSES_WAKEUP ...但行为没有变化

Edit2:我想做的就是播放音乐并在某个事件时唤醒我的设备。音乐运行完美,但设备保持黑色。

4

3 回答 3

7

WakeLock 是一种保持屏幕开启的低效方式。而是使用 WindowManager 来发挥作用。以下一行就足够了 WakeLock。此功能还需要 WakeLock 权限。此代码也比wakeLock 有效。

getWindow().addFlags(LayoutParams.FLAG_KEEP_SCREEN_ON);

您无需手动释放 WakeLock。此代码将允许 Android 系统自动处理锁定。当您的应用程序处于前台时,WakeLock 将被保持,否则 android 系统会自动释放锁定。

但如果你确实想释放标志,你可以这样做:

getWindow().clearFlags(LayoutParams.FLAG_KEEP_SCREEN_ON);
于 2011-04-05T07:26:25.393 回答
3
private static PowerManager.WakeLock lockStatic = null;
private static String LOCK_NAME_STATIC = "MyWakeLock";

public static void acquireStaticLock(Context context) {
    getLock(context).acquire();
}

synchronized private static PowerManager.WakeLock getLock(Context context) {
    if (lockStatic == null) {
        PowerManager mgr = (PowerManager) context
                .getSystemService(Context.POWER_SERVICE);
        lockStatic = mgr.newWakeLock(PowerManager.FULL_WAKE_LOCK,
                LOCK_NAME_STATIC);
        lockStatic.setReferenceCounted(true);
    }

    return (lockStatic);
}

用法:

acquireStaticLock()需要锁时打电话

getLock(this).release();需要释放锁时调用 内部活动

还要在 minifest 文件中添加权限:

<uses-permission android:name="android.permission.WAKE_LOCK" />
于 2011-09-27T09:15:07.040 回答
1

你在哪里获得唤醒锁?您将需要在意图的接收者中获取它,而不是在您的意图启动的服务/活动中。

于 2010-09-01T10:58:42.563 回答