มีวิธีปิดการใช้งานสกรีนเซฟเวอร์ในขณะที่แอพของฉันกำลังทำงานอยู่หรือไม่?
การหรี่แสงของหน้าจอคือสิ่งที่ฉันหมายถึง
มีวิธีปิดการใช้งานสกรีนเซฟเวอร์ในขณะที่แอพของฉันกำลังทำงานอยู่หรือไม่?
การหรี่แสงของหน้าจอคือสิ่งที่ฉันหมายถึง
คำตอบ:
คุณต้องการใช้สิ่งนี้:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
ฉันใช้:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
เพื่อปิดการหมดเวลาหน้าจอและ
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
เพื่อเปิดใช้งานอีกครั้ง
นอกจากนี้ยังมีวิธี XML ที่ Google แนะนำ:
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:keepScreenOn="true">
ตรวจสอบGoogle สไลด์ - สไลด์ 16
"Wakelocks มีค่าใช้จ่ายสูงหากลืม (... ) พิจารณาใช้ android: keepScreenOn เพื่อให้แน่ใจว่าถูกต้อง"
PowerManager.newWakeLockและgetWindow().addFlagsไม่ได้ผลด้วยเหตุผลบางประการสิ่งนี้ได้
สิ่งสำคัญคือต้องทราบว่าวิธีการเหล่านี้ทั้งหมดต้องถูกเรียกใช้จากเธรด UI จึงจะทำงานได้ ดูการเปลี่ยน KeepScreenOn จากจาวาสคริปต์ในแอป Android Cordova
เพิ่มบรรทัดด้านล่างลงในMainActivityแอพของคุณและแอพของคุณจะไม่ปิดไฟ
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
ในมุมมองในกรณีของฉันเป็นคลาสย่อย SurfaceView คุณสามารถตั้งค่าหน้าจอให้เปิดตลอดเวลาได้ ฉันต้องการให้หน้าจอยังคงเปิดอยู่ในขณะที่มุมมองนี้ยังคงวาดภาพอยู่
public class MyCoolSurfaceView extends SurfaceView {
@Override
protected void onAttachedToWindow (){
super.onAttachedToWindow();
this.setKeepScreenOn(true);
}
@Override
protected void onDetachedFromWindow(){
super.onDetachedFromWindow();
this.setKeepScreenOn(false);
}
วางไว้ที่ onStart
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "no sleep"); wakeLock.acquire();
และสิ่งนี้ที่คุณประจักษ์
<uses-permission android:name="android.permission.WAKE_LOCK" />
อย่าลืม
wakeLock.release();
ที่ onStop
PARTIAL_WAKE_LOCKทำให้หน้าจอดับลง
นี่คือวิธีที่ดีที่สุดในการแก้ปัญหานี้
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
android:keepScreenOn="true"
เป็นวิธีที่ดีกว่าในการจัดการสิ่งนี้หากเราต้องการให้หน้าจอใด ๆ ตื่นตัวตลอดเวลามิฉะนั้นเราจะต้องจัดการตัวเองเมื่อจะเปิดใช้งานและปิดการใช้งาน
https://developer.android.com/training/scheduling/wakelock.html
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;
1.getWindow (). addFlags (WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); เป็นทางออกที่ดีที่สุดสำหรับ Native Android
2. หากคุณต้องการทำกับแอปพลิเคชัน React android โปรดใช้รหัสด้านล่าง
@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);
}
});
}
}
ซึ่งสามารถทำได้โดยรับ Wake Lock
ฉันไม่ได้ทดสอบด้วยตัวเอง แต่นี่เป็นบทแนะนำเล็ก ๆ เกี่ยวกับเรื่องนี้
View#setKeepScreenOnหรือเทียบเท่าแอตทริบิวต์โครงร่าง xml,android:keepScreenOn="true"
WakeLock.
android:keepScreenOn="true"เป็นคำตอบเดียวที่ถูกต้องสำหรับกิจกรรมในความคิดของฉัน อยู่ห่างจาก wakelocks เว้นแต่จำเป็นจริงๆ
View.setKeepScreenOn()[link] [1] ล่ะ? ฉันไม่เคยใช้มันด้วยตัวเองเลย [1]: developer.android.com/reference/android/view/…