บังคับให้เปิดหน้าจอ


คำตอบ:


339

โปรดอย่าใช้ล็อคปลุก

สิ่งนี้ต้องการให้คุณให้สิทธิ์แอปของคุณเพิ่มเติมและง่ายมากที่จะแนะนำจุดบกพร่องที่คุณเผลอกด Wake Lock ไว้โดยไม่ได้ตั้งใจและเปิดหน้าจอทิ้งไว้

มันไกลและดีกว่ามากที่จะใช้แฟล็กหน้าต่างFLAG_KEEP_SCREEN_ONซึ่งคุณสามารถเปิดใช้งานบนหน้าต่างกิจกรรมของคุณในonCreate()ลักษณะนี้:

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

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

วิธีนี้จะช่วยให้แน่ใจว่าหน้าจอยังคงเปิดอยู่ในขณะที่หน้าต่างของคุณอยู่เบื้องหน้าและในขณะที่อยู่เบื้องหน้าเท่านั้น ช่วยลดความยุ่งยากในกรณีการใช้งานทั่วไปนี้อย่างมากโดยไม่ต้องมีการเล่นกลใด ๆ ที่คุณต้องทำเมื่อแอปของคุณเปลี่ยนสถานะ


5
นั่นเป็นการป้องกันไม่ให้เครื่องนอนหรือไม่? ถ้าเป็นเช่นนั้นความธรรมดาของ WAKE_LOCK ทำให้ฉันเกิดความผิดพลาดอย่างน่าตกใจ!
Michael Cramer

32
ใช่มันทำให้หน้าจอเปิดอยู่และป้องกันไม่ให้อุปกรณ์นอนหลับ
hackbod

1
ใช่คุณสามารถลบแฟล็กด้วยหน้าต่าง API ที่เหมาะสม คุณไม่จำเป็นต้องกังวลว่าจะทำให้เกิดอะไรขึ้นกรอบจะทำเช่นนั้นหากจำเป็น
hackbod

1
@hakbod: นี่จะใช้งานได้เพื่อให้หน้าจอมีชีวิตชีวา แต่สิ่งที่เกี่ยวกับหน้าจอที่หลับอยู่มันจะตื่นขึ้นมาและทำให้มันมีชีวิตอยู่หรือไม่ ????
วิธา

5
@ KC202 คุณสามารถใช้ WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON เพื่อทำให้หน้าจอเปิดขึ้นเมื่อหน้าต่างของคุณแสดงขึ้น มักใช้กับ FLAG_DISMISS_KEYGUARD และ / หรือ FLAG_SHOW_WHEN_LOCKED
hackbod

34

คำถามนี้มีคำตอบที่ยอดเยี่ยมอยู่แล้วโดย @hackbod!

ฉันกำลังตอบคำถามนี้ด้วยวิธีแก้ปัญหาเพิ่มเติมอีกสองข้อ!

โซลูชันที่มีอยู่:

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

โซลูชั่นเพิ่มเติม:

เราสามารถใช้ keepScreenOn

1. implementationโดยใช้setKeepScreenOn() 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);
       }

เอกสารhttp://developer.android.com/reference/android/view/View.html#setKeepScreenOn (boolean)

2. การเพิ่มkeepScreenOnไปที่xml 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" >

เอกสารhttp://developer.android.com/reference/android/view/View.html#attr_android%3akeepScreenOn

หมายเหตุ (บางจุดที่เป็นประโยชน์):

1.มันไม่สำคัญว่าkeepScreenOnควรใช้Main/Root/Parent View มันสามารถใช้กับchild viewจะทำงานใด ๆเช่นเดียวกับที่ใช้ในParent view

2.สิ่งเดียวที่สำคัญคือView's Visibility must be visibleคนอื่นฉลาดจะไม่ทำงาน!


หมายเหตุv.setKeepScreenOn(true);ดูเหมือนจะเป็นวิธีเดียวที่จะทำได้สำหรับส่วนโต้ตอบแบบเต็มหน้าจอ
Tim

16

อีกวิธีหนึ่งคือการเพิ่มandroid:keepScreenOn="true"( เอกสารประกอบ ) ไปยังมุมมองที่ต้องเปิดหน้าจอไว้

ช่วยให้สามารถควบคุมได้ละเอียดขึ้นเล็กน้อยในแง่ของมุมมองที่ยังคงอยู่และมุมมองใดไม่อยู่ คุณสามารถอ้างอิงการตั้งค่าจากไฟล์ทรัพยากรด้วยวิธีนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.