Buộc bật màn hình


Câu trả lời:


339

VUI LÒNG KHÔNG SỬ DỤNG KHÓA CÁNH

Điều này yêu cầu bạn cấp cho ứng dụng của mình một quyền bổ sung và rất dễ phát sinh lỗi khi bạn vô tình giữ khóa thức và do đó để màn hình bật.

Tốt hơn là sử dụng cờ cửa sổ FLAG_KEEP_SCREEN_ON, bạn có thể bật cờ này trên cửa sổ hoạt động của mình trong cửa sổ onCreate()như sau:

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

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

Điều này sẽ đảm bảo rằng màn hình vẫn sáng trong khi cửa sổ của bạn ở phía trước và chỉ khi nó ở phía trước. Nó đơn giản hóa đáng kể trường hợp sử dụng phổ biến này, loại bỏ bất kỳ sự xáo trộn nào bạn cần làm khi ứng dụng của bạn chuyển đổi giữa các trạng thái.


5
Điều đó có ngăn thiết bị ngủ không? Nếu vậy, sự phổ biến của WAKE_LOCK đối với tôi là một sai lầm gây sốc!
Michael Cramer

32
Có, nó giữ cho màn hình luôn sáng và ngăn thiết bị ở chế độ ngủ.
hackbod

1
Có, bạn có thể xóa cờ bằng API cửa sổ thích hợp. Bạn không cần phải lo lắng về việc gây ra bất cứ điều gì được vẽ, khung làm việc đó nếu cần.
hackbod

1
@hakbod: cái này có tác dụng làm cho màn hình sống động, nhưng màn hình đang ngủ thì sao, nó sẽ đánh thức và giữ cho màn hình còn sống ????
Kavitha

5
@ KC202 bạn có thể sử dụng WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON để làm cho màn hình bật khi cửa sổ của bạn được hiển thị. Cũng thường được sử dụng với FLAG_DISMISS_KEYGUARD và / hoặc FLAG_SHOW_WHEN_LOCKED.
hackbod

34

Câu hỏi này đã có câu trả lời tuyệt vời bởi @hackbod!

Tôi đang trả lời câu hỏi này với hai giải pháp bổ sung!

Giải pháp hiện tại:

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

Các giải pháp bổ sung:

chúng ta có thể sử dụng keepScreenOn

1. implementation sử dụngsetKeepScreenOn() 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);
       }

Tài liệu http://developer.android.com/reference/android/view/View.html#setKeepScreenOn(boolean)

2. Thêm keepScreenOnvàoxml 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" >

Tài liệu http://developer.android.com/reference/android/view/View.html#attr_android%3akeepScreenOn

Lưu ý (Một số điểm hữu ích):

1. Nó không quan trọng cái gì keepScreenOnnên được sử dụng Main/Root/Parent View nó có thể được sử dụng với bất kỳ cái nào child viewsẽ hoạt động Cũng giống như nó hoạt động trongParent view

2. Điều Chỉ có vấn đề là View's Visibility must be visiblekhôn ngoan khác nó sẽ không hoạt động!


lưu ý v.setKeepScreenOn(true);dường như là cách duy nhất để thực hiện điều đó đối với phân mảnh hộp thoại toàn màn hình
Tim

16

Một giải pháp khác là thêm android:keepScreenOn="true"( tài liệu ) vào các dạng xem cần giữ cho màn hình luôn sáng.

Cho phép kiểm soát chi tiết hơn một chút về chế độ xem nào ở trên và chế độ nào không. Bạn thậm chí có thể tham chiếu cài đặt từ tệp tài nguyên theo cách này.

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.