Android vô hiệu hóa thời gian chờ màn hình khi ứng dụng đang chạy


117

Có cách nào để tắt bảo vệ màn hình khi ứng dụng của tôi đang chạy không?

Ý tôi là màn hình mờ đi.


3
Còn việc sử dụng View.setKeepScreenOn()[link] [1] ?. Tôi chưa bao giờ tự mình sử dụng nó. [1]: developer.android.com/reference/android/view/…
dorzey

3
có thể trùng lặp của Force Screen On
Richard Ev

Câu trả lời:


173

Bạn muốn sử dụng một cái gì đó như thế này:

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

4
điều này làm cho nó cho hoạt động đang chạy hoặc toàn bộ ứng dụng?
Muhammed Refaat

@ MayurR.Amipara yeah Tôi nghĩ rằng đây là trường hợp ở đây
Muhammed Refaat

1
Nếu tôi viết mã này trong phương thức onCreate () của lớp Ứng dụng thì nó có hoạt động cho toàn bộ ứng dụng không?
Jayesh

Nếu Không thì Làm cách nào để tôi luôn bật toàn bộ màn hình ứng dụng bằng cách chèn ít mã hơn thay vì thêm dòng đó vào từng hoạt động.
Jayesh

1
@Jayesh: Bạn có thể tạo baseActivity và viết mã này trong Phương thức onCreate và mở rộng tất cả hoạt động từ baseActivity.
maryam

102

Tôi đã sử dụng:

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

để tắt thời gian chờ màn hình và

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

để kích hoạt lại nó.


84

Ngoài ra còn có một cách XML mà Google đề xuất:

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

Kiểm tra Google Trang trình bày - Trang trình bày 16.

"Wakelocks rất tốn kém nếu bị quên (...) Hãy cân nhắc sử dụng android: keepScreenOn để đảm bảo tính đúng đắn"


2
Đối với những người không có thời gian để đọc pdf được liên kết: "Wakelocks rất tốn kém nếu bị quên", "Hãy cân nhắc sử dụng android: keepScreenOn để đảm bảo tính chính xác".
lenrok258 07/02/16

2
@ lenrok258 Đã thêm vào câu trả lời ;-)
neteinstein

Trong khi sử dụng PowerManager.newWakeLockgetWindow().addFlagskhông hoạt động vì một số lý do, điều này đã làm.
Benjamin Basmaci


3

Đơn giản thêm dòng dưới đây vào của bạn MainActivityvà Ứng dụng của bạn không bao giờ tắt đèn.

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

2

Trong Chế độ xem, trong trường hợp của tôi là lớp con SurfaceView, bạn có thể đặt màn hình luôn bật. Tôi muốn màn hình vẫn sáng trong khi chế độ xem này vẫn đang vẽ nội dung.

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

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

1
Điều đó thực sự phức tạp hơn mức cần thiết. Chỉ cần gọi setKeepsScreenOn (true) ở bất kỳ đâu và khung công tác sẽ tự động giữ màn hình bật khi cửa sổ của bạn đang được hiển thị.
hackbod

1

Đặt cái này tại onStart

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

Và điều này tại bạn biểu hiện

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

Đừng quên

wakeLock.release();

tại onStop


1
PARTIAL_WAKE_LOCKcho phép màn hình tắt.
Michael

1

đây là cách tốt nhất để giải quyết vấn đề này

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

tại sao cần FLAG_FULLSCREEN trả lời câu hỏi này?
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); là giải pháp tốt nhất cho Android gốc.
2. nếu bạn muốn làm với ứng dụng React android thì hãy sử dụng mã bên dưới.

@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

Điều này có thể được thực hiện bằng cách có được Khóa đánh thức.

Tôi đã không tự mình kiểm tra nó, nhưng đây là một hướng dẫn nhỏ về điều này.


10
Không không không. Khóa Wake dễ bị lạm dụng và có thể làm hao pin của người dùng nếu không sử dụng cẩn thận. Sử dụng View#setKeepScreenOnhoặc thuộc tính bố cục xml của nó tương đương,android:keepScreenOn="true"
adamp

5
@adamp: OP không cho biết ứng dụng của anh ấy là một hoạt động hay một dịch vụ. Một hoạt động nên sử dụng cơ chế mà bạn trích dẫn. Một dịch vụ nên sử dụng a WakeLock.
CommonsWare

cảm ơn nó không phải là một dịch vụ. nó tương tự như một trình xem ảnh và tôi chỉ không muốn màn hình bị mờ đi.
kẹp vào

@adamp: đề cập của bạn về android:keepScreenOn="true"là câu trả lời hợp lệ duy nhất cho các hoạt động theo quan điểm của tôi. Tránh xa wakelocks trừ khi thực sự cần thiết.
pauluss86 21/09/12

Không chỉ Hoạt động mà bất kỳ loại giao diện người dùng nào hiển thị cửa sổ. Câu trả lời được chấp nhận của việc sử dụng cờ cửa sổ tương ứng có giá trị như nhau.
adamp
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.