有没有一种方法可以在我的应用程序运行时禁用屏幕保护程序?
屏幕变暗是我的意思。
有没有一种方法可以在我的应用程序运行时禁用屏幕保护程序?
屏幕变暗是我的意思。
Answers:
您想使用如下形式:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
我用了:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
禁用屏幕超时和
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
重新启用它。
Google还推荐一种XML方式:
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:keepScreenOn="true">
查看Google幻灯片 -幻灯片16。
“如果忘记了唤醒锁,则代价很高(...)考虑使用android:keepScreenOn以确保正确性”
PowerManager.newWakeLock和getWindow().addFlags出于某种原因没有工作,这做到了。
重要的是要注意,所有这些方法都必须从UI线程运行才能起作用。在Android Cordova应用中查看从JavaScript更改KeepScreenOn
在View中,以我的情况为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允许屏幕关闭。
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);是适用于本机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);
}
});
}
}
这可以通过获取唤醒锁来完成。
我没有亲自测试过,但是这里有一个小教程。
View#setKeepScreenOn或等效的xml布局属性,android:keepScreenOn="true"
WakeLock。
android:keepScreenOn="true"我认为您的提及是活动的唯一有效答案。除非绝对必要,否则请远离唤醒锁。
View.setKeepScreenOn()[link] [1]?我自己从来没有用过它。[1]:developer.android.com/reference/android/view/...