2012-02-10 453 views
2

我安排了鬧鐘。使用WakeLock.acquire()KeyguardLock.disableKeyguard(),我可以喚醒屏幕並顯示我的活動。不過,我寧願只顯示一個對話框。我的HTC和三星設備內置報警器就是這樣做的。我期望在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 2013-02-22 23:37:26

+0

@Behzad我沒有按照描述完成,但現在回顧(此線程已超過一年),您可以將對話樣式設置爲對話以獲得相同的結果。如果你不熟悉如何做到這一點,谷歌「Android風格的活動作爲對話」。這很容易在清單中的Activity元素中完成。 – Rich 2013-02-22 23:51:06

+0

是的,你是對的。謝謝。 – Behzad 2013-02-23 00:23:05

回答

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(); 

     } 
    } 
}