Android WakeLock - PullRequest
       2

Android WakeLock

6 голосов
/ 01 сентября 2010

У меня проблема с приобретением 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();

Что я делаю не так?

Edit: добавлен еще один флаг ACQUIRE_CAUSES_WAKEUP ... но без изменений в поведении

Edit2: все, что я пытаюсь сделать, это играть музыку и разбудить мое устройство при определенном событии. Музыка работает отлично, но устройство остается черным.

Ответы [ 3 ]

7 голосов
/ 05 апреля 2011

WakeLock - неэффективный способ держать экран включенным.Вместо этого используйте WindowManager, чтобы творить чудеса.Следующей одной строки будет достаточно для WakeLock.Разрешение WakeLock также необходимо, чтобы это работало.Также этот код более эффективен, чем wakeLock.

getWindow().addFlags(LayoutParams.FLAG_KEEP_SCREEN_ON);

Вам не нужно связывать WakeLock вручную.Этот код позволит системе Android автоматически обрабатывать блокировку.Когда ваше приложение находится на переднем плане, тогда WakeLock удерживается, а система Android автоматически снимает блокировку автоматически.

Но если вы действительно хотите снять флаг, вы можете сделать это с помощью:

getWindow().clearFlags(LayoutParams.FLAG_KEEP_SCREEN_ON);
3 голосов
/ 27 сентября 2011
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(); внутри, когда вам нужно снять блокировку

Также добавьте разрешение в файл минифеста:

<uses-permission android:name="android.permission.WAKE_LOCK" />
1 голос
/ 01 сентября 2010

Где вы приобретаете замок? Вам нужно будет приобрести его в получателе намерения, а не в услуге / деятельности, которую начинает ваше намерение.

...