Android, uygulama çalışırken ekran zaman aşımını devre dışı bırakır


Yanıtlar:


173

Bunun gibi bir şey kullanmak istiyorsun:

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

4
bu onu çalışan aktivite için mi yoksa tüm uygulama için mi yapar?
Muhammed Refaat

@ MayurR.Amipara evet Sanırım burada durum bu
Muhammed Refaat

1
Bu kodu Uygulama sınıfı onCreate () yönteminde yazarsam, tüm uygulama için çalışır mı?
Jayesh

Hayır ise, etkinliğin her birine bu satırı eklemek yerine daha az kod ekleyerek tüm uygulama ekranını nasıl açık tutabilirim.
Jayesh

1
@Jayesh: Bir baseActivity oluşturabilir ve bu kodu onCreate Yöntemine yazabilir ve tüm aktiviteyi baseActivity'den genişletebilirsiniz.
maryam

102

Kullandım:

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

ekran zaman aşımını devre dışı bırakmak ve

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

yeniden etkinleştirmek için.


84

Google'ın önerdiği bir XML yolu da vardır:

<LinearLayout
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:keepScreenOn="true">

Google Slaytlar'ı Kontrol Edin - Slayt 16.

"Wakelocks unutulursa maliyetlidir (...) Doğruluğu sağlamak için android: keepScreenOn kullanmayı düşünün"


2
Bağlantılı pdf okumak için zamanı olmayanlar için: "Wakelocks unutulursa maliyetlidir", "Doğruluğu sağlamak için android: keepScreenOn kullanmayı düşünün".
lenrok258

2
@ lenrok258 Cevaba eklendi ;-)
neteinstein

Kullanırken PowerManager.newWakeLockve getWindow().addFlagsherhangi bir nedenle işe yaramazken, bu yaptı.
Benjamin Basmaci


3

Basitçe aşağıdaki satıra ekleyin MainActivityve uygulamanız ışıkları asla kapatmaz.

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

2

Bir Görünümde, benim durumumda bir SurfaceView alt sınıfı, ekranı her zaman açık olarak ayarlayabilirsiniz. Bu görünüm hala bir şeyler çizerken ekranın açık kalmasını istedim.

public class MyCoolSurfaceView extends SurfaceView { 
@Override
protected void onAttachedToWindow (){
    super.onAttachedToWindow();
    this.setKeepScreenOn(true);
}

@Override
protected void onDetachedFromWindow(){
    super.onDetachedFromWindow();
    this.setKeepScreenOn(false);
}

1
Bu aslında gerekenden daha karmaşık. Herhangi bir yerde setKeepsScreenOn (true) 'u çağırmanız yeterlidir ve çerçeve, pencereniz gösterilirken ekranı otomatik olarak açık tutacaktır.
hackbod

1

Bunu onStart'a koy

    PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
    wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "no sleep");
    wakeLock.acquire();

Ve bu sende tezahür ediyor

    <uses-permission android:name="android.permission.WAKE_LOCK" />

Unutma

wakeLock.release();

onStop'da


1
PARTIAL_WAKE_LOCKekranın kapanmasına izin verir.
Michael

1

bunu çözmenin en iyi yolu bu

 getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

FLAG_FULLSCREEN'in bu soruyu yanıtlaması neden gerekli?
Abdul Wasae


0
procedure SetSleep(aEnable:Boolean);
var
    vFlags: integer;
begin
    vFlags := TJWindowManager_LayoutParams.JavaClass.FLAG_TURN_SCREEN_ON or
        TJWindowManager_LayoutParams.JavaClass.FLAG_DISMISS_KEYGUARD or
        TJWindowManager_LayoutParams.JavaClass.FLAG_SHOW_WHEN_LOCKED or
        TJWindowManager_LayoutParams.JavaClass.FLAG_KEEP_SCREEN_ON;

    if aEnable then
    begin
      CallInUIThread (   // uses FMX.Helpers.Android
      procedure
      begin
        TAndroidHelper.Activity.getWindow.setFlags (vFlags, vFlags);
      end );
    end
    else
      CallInUIThread (
      procedure
      begin
        TAndroidHelper.Activity.getWindow.clearFlags (vFlags);
      end );
end;

0

1.getWindow (). AddFlags (WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); Native Android için en iyi çözümdür.
2. React android uygulaması ile yapmak istiyorsanız, lütfen aşağıdaki kodu kullanın.

@ReactMethod
    public void activate() {
        final Activity activity = getCurrentActivity();
        if (activity != null) {
            activity.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
                }
            });
        }

    }

-1

Bu, bir Wake Lock alarak yapılabilir.

Kendim test etmedim, ancak burada bununla ilgili küçük bir eğitim var.


10
Hayır hayır hayır. Uyandırma kilitleri kolaylıkla yanlış kullanılır ve çok dikkatli kullanılmazsa kullanıcının pilini tüketebilir. View#setKeepScreenOnXml düzen özniteliğini veya eşdeğerini kullanınandroid:keepScreenOn="true"
adamp

5
@adamp: OP, uygulamasının bir etkinlik mi yoksa bir hizmet mi olduğunu belirtmedi. Bir etkinlik, alıntı yaptığınız mekanizmayı kullanmalıdır. Bir hizmet bir WakeLock.
CommonsWare

teşekkürler bir hizmet değil. bir resim görüntüleyiciye benzer ve ekranın soluk olmasını istemiyorum.
kelepçe

@adamp: android:keepScreenOn="true"Bence aktiviteler için tek geçerli cevaptan bahsetmeniz . Kesinlikle gerekli olmadıkça uyandırma kilitlerinden uzak durun.
pauluss86

Yalnızca Etkinlikler değil, bir pencere gösteren herhangi bir kullanıcı arabirimi türü. Karşılık gelen pencere bayrağını kullanmanın kabul edilen yanıtı eşit derecede geçerlidir.
adamp
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.