尝试确定屏幕是否关闭时检测常亮显示



我正在尝试弄清楚如何检测Android上的显示器是否关闭,我感觉S10上的常亮显示器正在影响我的结果。

目前,我正在使用此堆栈溢出答案中的逻辑。

该线程上还有一条评论说您应该能够使用Display.FLAG_PRIVATE来检查三星的常亮显示屏,但它没有解释如何。

利用这些信息,我把这个函数放在一起。但它似乎不起作用。如果我启用了始终在线的显示器,则显示似乎几乎总是算作打开。

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标志的方式是否正确,或者这是否有助于始终在线显示影响结果的可能性。

我发现标志实际上与它没有任何关系。显示状态似乎是几种状态之一,包括Display.STATE_DOZE_SUSPENDEDDisplay.STATE_DOZE以及常亮显示处于活动状态时的其他几种状态。因此,我只是检查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();
}
}

最新更新