Android menonaktifkan waktu tunggu layar saat aplikasi berjalan


Jawaban:


173

Anda ingin menggunakan sesuatu seperti ini:

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

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.


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"


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

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

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


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

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;

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

    }

-1

Ini dapat dilakukan dengan memperoleh Wake Lock.

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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.