Ekranı Açmaya Zorla


Yanıtlar:


339

LÜTFEN UYANMA KİLİDİ ​​KULLANMAYIN

Bu, uygulamanıza ek bir izin vermenizi gerektirir ve yanlışlıkla uyandırma kilidini tutmaya devam ettiğinizde ve böylece ekranı açık bıraktığınızda hatalar ortaya çıkarmak çok kolaydır.

FLAG_KEEP_SCREEN_ONAktivitenizin penceresinden şu şekilde etkinleştirebileceğiniz pencere bayrağını kullanmak çok, çok daha iyidir onCreate():

@Override
protected void onCreate(Bundle icicle) {
    super.onCreate(icicle);

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}

Bu, pencereniz ön plandayken ve yalnızca ön plandayken ekranın açık kalmasını sağlayacaktır. Bu yaygın kullanım durumunu büyük ölçüde basitleştirerek, uygulamanızın durumlar arasında geçişi sırasında yapmanız gereken herhangi bir hokkabazlığı ortadan kaldırır.


5
Bu, cihazın uyumasını engelliyor mu? Eğer öyleyse, WAKE_LOCK'un yaygınlığı beni şok edici bir hata olarak görüyor!
Michael Cramer

32
Evet, ekranı açık tutar ve cihazın uyumasını engeller.
hackbod

1
Evet, uygun pencere API'si ile bayrağı kaldırabilirsiniz. Herhangi bir şeyin çizilmesine neden olma konusunda endişelenmenize gerek yok, çerçeve gerekirse bunu yapar.
hackbod

1
@hakbod: Bu, ekranı canlı tutmak için işe yarar, peki ya uykuda olan ekran, onu uyandırır ve canlı tutar mı ????
Kavitha

5
@ KC202, pencereniz görüntülendiğinde ekranın açılmasını sağlamak için WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON'u kullanabilirsiniz. FLAG_DISMISS_KEYGUARD ve / veya FLAG_SHOW_WHEN_LOCKED ile de sıklıkla kullanılır.
hackbod

34

Bu Soru @hackbod tarafından Zaten Harika Cevap!

Bu Soruyu İki Ek Çözümle Cevaplıyorum!

Mevcut Çözüm:

@Override
    protected void onCreate(Bundle icicle) {
        super.onCreate(icicle);    
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    }

Ek Çözümler:

kullanabiliriz keepScreenOn

1. implementation kullanmasetKeepScreenOn() in java code

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // or any View (in case generated programmatically ) 
        View v = getLayoutInflater().inflate(R.layout.driver_home, null);

        v.setKeepScreenOn(true);
        setContentView(v);
       }

Dokümanlar http://developer.android.com/reference/android/view/View.html#setKeepScreenOn(boolean)

2. ekleme keepScreenOniçinxml layout

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:keepScreenOn="true" >

Dokümanlar http://developer.android.com/reference/android/view/View.html#attr_android%3akeepScreenOn

Not (Bazı Yararlı Noktalar):

1.keepScreenOn Üzerinde kullanılması gerektiği önemli değil Main/Root/Parent View Herhangi bir şekilde kullanılabilir, child viewÇalıştığı gibi çalışır.Parent view

2. Sadece Şey meselesi, View's Visibility must be visibleaksi takdirde işe yaramayacağıdır!


not v.setKeepScreenOn(true);, bunu tam ekran iletişim kutusu için yapmanın tek yolu gibi görünüyor
Tim

16

Diğer bir çözüm, ekranı açık tutması gereken görünümlere android:keepScreenOn="true"( dokümantasyon ) eklemektir .

Hangi görünümlerin açık kaldığı ve hangilerinin kalmadığı konusunda biraz daha ayrıntılı kontrol sağlar. Bu şekilde bir kaynak dosyasındaki bir ayara bile başvurabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.