Android menonaktifkan waktu tunggu layar saat aplikasi berjalan

Jawaban:

173

Anda ingin menggunakan sesuatu seperti ini:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Ian G. Clifton
sumber
4
ini membuatnya untuk aktivitas yang sedang berjalan atau seluruh aplikasi?
Muhammed Refaat
@ MayurR.Amipara ya saya rasa ini yang terjadi di sini
Muhammed Refaat
1
Jika saya menulis kode ini dalam metode kelas Aplikasi onCreate (), apakah itu akan berfungsi untuk seluruh aplikasi?
Jayesh
Jika Tidak, Bagaimana saya bisa membuat seluruh layar aplikasi tetap aktif dengan menyisipkan lebih sedikit kode daripada menambahkan baris itu ke setiap aktivitas.
Jayesh
1
@Jayesh: Anda dapat membuat baseActivity dan menulis kode ini dalam Metode onCreate dan memperluas semua aktivitas dari baseActivity.
maryam
102

Saya menggunakan:

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

untuk menonaktifkan batas waktu layar dan

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

untuk mengaktifkannya kembali.

capellone78
sumber
84

Ada juga cara XML yang direkomendasikan Google:

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

Periksa Google Slides - Slide 16.

"Wakelocks mahal jika dilupakan (...) Pertimbangkan untuk menggunakan android: keepScreenOn untuk memastikan kebenaran"

neteinstein.dll
sumber
2
Untuk mereka yang tidak punya waktu untuk membaca pdf yang ditautkan: "Wakelocks mahal jika dilupakan", "Pertimbangkan untuk menggunakan android: keepScreenOn untuk memastikan kebenaran".
lenrok258
2
@ lenrok258 Ditambahkan ke jawaban ;-)
neteinstein
Saat menggunakan PowerManager.newWakeLockdan getWindow().addFlagstidak berfungsi karena alasan tertentu, ini berhasil.
Benjamin Basmaci
3

Tambahkan sederhana di bawah garis ke dalam Anda MainActivitydan Aplikasi Anda tidak pernah mematikan lampu.

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Pengecualian Pointer Null
sumber
2

Dalam Tampilan, dalam kasus saya subkelas SurfaceView, Anda dapat menyetel layar selalu aktif. Saya ingin layar tetap menyala saat tampilan ini masih menggambar sesuatu.

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

@Override
protected void onDetachedFromWindow(){
    super.onDetachedFromWindow();
    this.setKeepScreenOn(false);
}
orkoden
sumber
1
Itu sebenarnya lebih rumit dari yang dibutuhkan. Panggil saja setKeepsScreenOn (true) di mana saja, dan framework akan secara otomatis menjaga layar tetap menyala saat jendela Anda ditampilkan.
hackbod
1

Taruh ini di onStart

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

Dan ini pada Anda terwujud

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

Jangan lupa

wakeLock.release();

di onStop

Gonkas
sumber
1
PARTIAL_WAKE_LOCKmemungkinkan layar untuk mati.
Michael
1

ini adalah cara terbaik untuk menyelesaikannya

 getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
MBMJ
sumber
mengapa kebutuhan FLAG_FULLSCREEN untuk menjawab pertanyaan ini?
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;
Artur Majtczak
sumber
0

1. getWindow (). AddFlags (WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); adalah solusi terbaik untuk Android Asli.
2. Jika Anda ingin menggunakan aplikasi Android React, gunakan kode di bawah ini.

@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);
                }
            });
        }

    }
Manisha
sumber
-1

Ini dapat dilakukan dengan memperoleh Wake Lock.

Saya tidak mengujinya sendiri, tetapi berikut adalah tutorial kecil tentang ini.

wonne
sumber
10
Tidak tidak Tidak. Wake lock mudah disalahgunakan dan dapat menguras baterai pengguna jika tidak digunakan dengan sangat hati-hati. Gunakan View#setKeepScreenOnatau atribut layout xml-nya yang setara,android:keepScreenOn="true"
adamp
5
@adamp: OP tidak menunjukkan apakah aplikasinya adalah suatu aktivitas atau layanan. Suatu aktivitas harus menggunakan mekanisme yang Anda kutip. Sebuah layanan harus menggunakan WakeLock.
CommonsWare
terima kasih ini bukan layanan. Ini mirip dengan penampil gambar dan saya hanya tidak ingin layar diredupkan.
penjepit
@adamp: Sebutan Anda android:keepScreenOn="true"adalah satu-satunya jawaban yang valid untuk kegiatan menurut saya. Jauhi wakelock kecuali benar-benar diperlukan.
pauluss86
Bukan hanya Aktivitas tetapi semua jenis UI yang menampilkan jendela. Jawaban yang diterima untuk menggunakan bendera jendela yang sesuai sama validnya.
adamp