2012-02-10 6 views
2

У меня установлен будильник. Используя WakeLock.acquire() и KeyguardLock.disableKeyguard(), я могу разбудить экран и показать свою активность. Однако я бы предпочел просто показать диалог. Встроенный будильник на устройствах HTC и Samsung действует таким образом. Я ожидал найти метод на объекте KeyguardLock, но я не видел ничего в документах, которые привели меня в этом направлении. Как я могу включить KeyguardLock, но покажу свое диалоговое окно, как это делают встроенные аварийные сигналы. Вот мой текущий код, который работает в onCreate()Прокрутите экран и покажите диалоговое окно на экране блокировки

KeyguardManager km = (KeyguardManager) getSystemService(KEYGUARD_SERVICE); 
    keyguardLock = km.newKeyguardLock(KeyguardLockTag); 
    keyguardLock.disableKeyguard(); 

    final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
    int flags = PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP; 
    wakeLock = pm.newWakeLock(flags, WakeLockTag); 
    wakeLock.acquire(); 
+0

Вы нашли решение? – Behzad

+0

@Behzad Я не делал этого так, как описано, но оглядываясь назад (эта тема старше года), вы можете настроить свою деятельность как диалог, чтобы достичь того же результата. Если вы не знаете, как это сделать, Google «активность в стиле андроида как диалог». Это легко сделать в элементе Activity в манифесте. – Rich

+0

Да, вы правы. Благодарю. – Behzad

ответ

0

Просто попробуйте это, чтобы разбудить экран устройства даже при блокировании.

package android.taskscheduler; 

import android.app.IntentService; 
import android.content.Context; 
import android.content.Intent; 
import android.os.PowerManager; 

public abstract class WakeIntentService extends IntentService 
{ 
abstract void doReminderWork(Intent intent); 
public static final String LOCK_NAME_STATIC = "your_package_name"; 
private static PowerManager.WakeLock lockStatic = null; 

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

synchronized private static PowerManager.WakeLock getLock(Context context) 
{ 
    if(lockStatic == null) 
     { 
      PowerManager powManager = (PowerManager)  context.getSystemService(Context.POWER_SERVICE); 

    lockStatic = powManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, LOCK_NAME_STATIC); 
    lockStatic.setReferenceCounted(true); 
    } 
    return (lockStatic); 
} 
public WakeIntentService(String name) 
{ 
    super(name); 
} 
@Override 
     final protected void onHandleIntent(Intent intent) 
{ 
     try{ 
      doReminderWork(intent); 

     }finally 
    { 
     getLock(this).release(); 

     } 
    } 
}