2013-07-25 14 views
8

Sadece o an için tuş kilidini sürekli olarak kapatmak istemiyorum. Örneğin bir alarm verildiğinde (örn. Uyandırma alarmı) ekran kilidini açmadan onu kapatabilir/erteleyebilir. Aynı davranışı elde etmek istiyorum.Kapalı ekranda üstte olması gereken bir diyalog başlatmak istiyorum. Iletişim kutusunun kilidini açmadan butona tıklayabilirim. Bu mümkün mü? Evet ise nasıl?Ekran kilidini açmadan tıklanabilen bir diyalog penceresi (alarm dimiss/snooze gibi) nasıl başlatılır

Aşağıdaki istemiyorum:

private void unlockScreen(Context context){ 
     Log.d("dialog", "unlocking screen now"); 
     PowerManager powermanager = ((PowerManager)context.getSystemService(Context.POWER_SERVICE)); 
     WakeLock wakeLock = powermanager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "tag"); 
     wakeLock.acquire(); 
     Window wind = DialogActivity.this.getWindow(); 
     wind.addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD); 
     wind.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
     wind.addFlags(LayoutParams.FLAG_TURN_SCREEN_ON); 


    } 
+0

Neden kimse cevap vermiyor? – user93796

cevap

4

bu irade yararlı olabilir. public WindowManager.LayoutParams()

yılında FLAG_TURN_SCREEN_ON birlikte pencere bayrağı FLAG_SHOW_WHEN_LOCKED uygulayın veya

public KeyguardManager.KeyguardLock newKeyguardLock (String tag) 

Kullanım FLAG_DISMISS_KEYGUARD ve/veya FLAG_SHOW_WHEN_LOCKED yerine göre KeyguardManager sınıfını (API 13 kullanımdan kaldırılmış, ancak yine de çalışır) kullanabilir; Bu, uygulamanızın ön plana girip çıktığı sırada tuş kilidini kesintisiz olarak gizlemenize olanak tanır ve herhangi bir özel izin talep edilmesini gerektirmez. Klavyeyi kilitlemenizi veya kilidini açmanızı sağlar. Context.getSystemService() numaralı telefonu arayarak bu sınıfın bir örneğini alın. Bu sınıf KeyguardManager ile sarılmıştır.



KeyguardManager


WindowManager.LayoutParams Eğer bu soruna yönelik
Şerefe daha detaylı kodlama talimatları gerekirse sormaya çekinmeyin ancak şimdi anlıyorum Umut ..

+0

'KeyguardManager.KeyguardLock', Android 13 uyarınca API 13’de kullanımdan kaldırılmıştır. Bu yüzden cihazı uykudan açmak istiyorsanız "FLAG_SHOW_WHEN_LOCKED" ve "FLAG_TURN_SCREEN_ON" ile devam etmelisiniz. – VenoM

+0

Evet, haklısınız. 'KeyguardManager.KeyguardLock' amortismanlı bir yöntem, ben de bu şekilde kodlama imkanı olduğunu öne sürdüm (hala işe yarıyor). Ve FLAG_TURN_SCREEN_ON'dan bahsettiğin için teşekkürler, bunu gerçekten unutuyorum. –

-1

windows tipi ise yeterince yüksek yerleşmiştir. Pencerenizi kilit ekranının üstünde gösterebilirsiniz.

WindowsParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;

0

böyle, geçerli pencere bayraklar ekleyebilirsiniz:

win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
    win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON 
    | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON 
    | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON); 

bunu kalıcı istemiyorsanız, eklediğiniz sadece net bayrakları Kullanmak yöntemini onlara ihtiyacım yok olduğunda: clearFlags (bayraklar).

İlgili konular