尝试确定屏幕是否关闭时检测常亮显示
Detect Always-On Display when trying to determine if the screen is off
我正在尝试弄清楚如何检测 Android 上的显示屏是否关闭,我感觉我的 S10 上的常亮显示屏正在影响我的结果。
目前,我正在使用 this Whosebug answer 中的逻辑。
还有 a comment on that thread that says you should be able to use Display.FLAG_PRIVATE
用于检查三星的 Always-On Display,但没有说明具体方法。
使用这些信息,我将这个函数放在一起。但这似乎不起作用。如果我启用了常亮显示,则显示几乎总是被计为开启。
public boolean isScreenOn() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
DisplayManager dm = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE);
for (Display display : dm.getDisplays()) {
if ((display.getFlags() & Display.FLAG_PRIVATE) != Display.FLAG_PRIVATE) {
if (display.getState() != Display.STATE_OFF) {
return true;
}
}
}
return false;
} else {
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
//noinspection deprecation
return pm.isScreenOn();
}
}
我不确定我检查 Display.FLAG_PRIVATE
标志的方式是否正确,或者这是否会有助于影响结果的 Always-On 显示的潜力。
我发现这些标志实际上与它没有任何关系。似乎显示状态将是包括 Display.STATE_DOZE_SUSPENDED
, Display.STATE_DOZE
and several others when the Always-On Display is active. So instead, I'm just checking for Display.STATE_ON
在内的几种状态之一,并将所有其他状态视为显示已关闭。
public boolean isScreenOn() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
DisplayManager dm = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE);
for (Display display : dm.getDisplays()) {
if (display.getState() == Display.STATE_ON) {
return true;
}
}
return false;
} else {
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
//noinspection deprecation
return pm.isScreenOn();
}
}
我正在尝试弄清楚如何检测 Android 上的显示屏是否关闭,我感觉我的 S10 上的常亮显示屏正在影响我的结果。
目前,我正在使用 this Whosebug answer 中的逻辑。
还有 a comment on that thread that says you should be able to use Display.FLAG_PRIVATE
用于检查三星的 Always-On Display,但没有说明具体方法。
使用这些信息,我将这个函数放在一起。但这似乎不起作用。如果我启用了常亮显示,则显示几乎总是被计为开启。
public boolean isScreenOn() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
DisplayManager dm = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE);
for (Display display : dm.getDisplays()) {
if ((display.getFlags() & Display.FLAG_PRIVATE) != Display.FLAG_PRIVATE) {
if (display.getState() != Display.STATE_OFF) {
return true;
}
}
}
return false;
} else {
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
//noinspection deprecation
return pm.isScreenOn();
}
}
我不确定我检查 Display.FLAG_PRIVATE
标志的方式是否正确,或者这是否会有助于影响结果的 Always-On 显示的潜力。
我发现这些标志实际上与它没有任何关系。似乎显示状态将是包括 Display.STATE_DOZE_SUSPENDED
, Display.STATE_DOZE
and several others when the Always-On Display is active. So instead, I'm just checking for Display.STATE_ON
在内的几种状态之一,并将所有其他状态视为显示已关闭。
public boolean isScreenOn() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
DisplayManager dm = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE);
for (Display display : dm.getDisplays()) {
if (display.getState() == Display.STATE_ON) {
return true;
}
}
return false;
} else {
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
//noinspection deprecation
return pm.isScreenOn();
}
}