下面列出了android.view.Display#getState ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
public boolean isScreenOn(Context context)
{
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH)
{
DisplayManager dm = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
boolean screenOn = false;
for (Display display : dm.getDisplays())
{
if (display.getState() != Display.STATE_OFF)
{
screenOn = true;
}
}
return screenOn;
} else
{
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
//noinspection deprecation
return pm.isScreenOn();
}
}
/**
* Is the screen of the device on.
*
* @param context the context
* @return true when (at least one) screen is on
*/
public boolean isScreenOn(Context context) {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
DisplayManager dm = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
boolean screenOn = false;
for (Display display : dm.getDisplays()) {
if (display.getState() != Display.STATE_OFF) {
screenOn = true;
}
}
return screenOn;
} else {
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
return pm.isScreenOn();
}
}
private boolean isScreenOn() {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
DisplayManager dm = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
boolean screenOn = false;
for (Display display : dm.getDisplays()) {
if (display.getState() != Display.STATE_OFF) {
screenOn = true;
}
}
return screenOn;
} else {
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
//noinspection deprecation
return pm.isScreenOn();
}
}
private void debugScreenPowerState() {
String isDeviceIdleMode = "unknow"; // --- API 23
String isIgnoringBatteryOptimizations = "unknow"; // --- API 23
String isPowerSaveMode = "unknow"; // --- API 21
String isInteractive = "unknow"; // --- API 20 ( before since API 7 is: isScreenOn())
String screenState = "unknow"; // --- API 20
if (Build.VERSION.SDK_INT >= 23) {
isDeviceIdleMode = String.format("%s", mPowerManager.isDeviceIdleMode());
isIgnoringBatteryOptimizations = String.format("%s", mPowerManager.isIgnoringBatteryOptimizations(mPackageName));
}
if (Build.VERSION.SDK_INT >= 21) {
isPowerSaveMode = String.format("%s", mPowerManager.isPowerSaveMode());
}
if (Build.VERSION.SDK_INT >= 20) {
isInteractive = String.format("%s", mPowerManager.isInteractive());
Display display = mWindowManager.getDefaultDisplay();
switch (display.getState()) {
case Display.STATE_OFF:
screenState = "STATE_OFF";
break;
case Display.STATE_ON:
screenState = "STATE_ON";
break;
case Display.STATE_DOZE:
screenState = "STATE_DOZE";
break;
case Display.STATE_DOZE_SUSPEND:
screenState = "STATE_DOZE_SUSPEND";
break;
default:
break;
}
} else {
isInteractive = String.format("%s", mPowerManager.isScreenOn());
}
Log.d(TAG, String.format("debugScreenPowerState(): screenState='%s', isInteractive='%s', isPowerSaveMode='%s', isDeviceIdleMode='%s', isIgnoringBatteryOptimizations='%s'", screenState, isInteractive, isPowerSaveMode, isDeviceIdleMode, isIgnoringBatteryOptimizations));
}
public static boolean isScreenOn(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
DisplayManager dm = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
for (Display display : dm.getDisplays()) {
if (display.getState() != Display.STATE_OFF) {
return true;
}
}
return false;
} else {
PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
return powerManager.isScreenOn();
}
}
private boolean isScreenOn(Context context) {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
@SuppressLint("WrongConstant") DisplayManager dm = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
boolean screenOn = false;
for (Display display : dm.getDisplays()) {
if (display.getState() != Display.STATE_OFF) {
screenOn = true;
}
}
return screenOn;
} else {
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
return pm.isScreenOn();
}
}
public static boolean isScreenOn(Context context)
{
DisplayManager dm = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
for (Display display : dm.getDisplays())
{
if (display.getState() != Display.STATE_OFF)
return true;
}
return false;
}
public static boolean isScreenOn(Context context) {
DisplayManager dm = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
for (Display display : dm.getDisplays()) {
if (display.getState() == Display.STATE_ON
|| display.getState() == Display.STATE_UNKNOWN) {
return true;
}
}
return false;
}
boolean isScreenOn() {
if (Utils.isAndroidNewerThanL()) {
DisplayManager dm = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE);
for (Display display : dm.getDisplays()) {
if (display.getState() != Display.STATE_OFF) {
return true;
}
}
return false;
} else {
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
return powerManager.isScreenOn();
}
}
private boolean isDisplayOn(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
DisplayManager dm = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
for (Display display : dm.getDisplays()) {
if (display.getState() != Display.STATE_OFF) {
return true;
}
}
return false;
} else {
PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
return powerManager.isScreenOn();
}
}
private void debugScreenPowerState() {
String isDeviceIdleMode = "unknow"; // --- API 23
String isIgnoringBatteryOptimizations = "unknow"; // --- API 23
String isPowerSaveMode = "unknow"; // --- API 21
String isInteractive = "unknow"; // --- API 20 ( before since API 7 is: isScreenOn())
String screenState = "unknow"; // --- API 20
if (android.os.Build.VERSION.SDK_INT >= 23) {
isDeviceIdleMode = String.format("%s", mPowerManager.isDeviceIdleMode());
isIgnoringBatteryOptimizations = String.format("%s", mPowerManager.isIgnoringBatteryOptimizations(mPackageName));
}
if (android.os.Build.VERSION.SDK_INT >= 21) {
isPowerSaveMode = String.format("%s", mPowerManager.isPowerSaveMode());
}
if (android.os.Build.VERSION.SDK_INT >= 20) {
isInteractive = String.format("%s", mPowerManager.isInteractive());
Display display = mWindowManager.getDefaultDisplay();
switch (display.getState()) {
case Display.STATE_OFF:
screenState = "STATE_OFF";
break;
case Display.STATE_ON:
screenState = "STATE_ON";
break;
case Display.STATE_DOZE:
screenState = "STATE_DOZE";
break;
case Display.STATE_DOZE_SUSPEND:
screenState = "STATE_DOZE_SUSPEND";
break;
default:
break;
}
} else {
isInteractive = String.format("%s", mPowerManager.isScreenOn());
}
Log.d(TAG, String.format("debugScreenPowerState(): screenState='%s', isInteractive='%s', isPowerSaveMode='%s', isDeviceIdleMode='%s', isIgnoringBatteryOptimizations='%s'", screenState, isInteractive, isPowerSaveMode, isDeviceIdleMode, isIgnoringBatteryOptimizations));
}
public static boolean isScreenOn(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
DisplayManager dm = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
for (Display display : dm.getDisplays()) {
if (display.getState() != Display.STATE_OFF) {
return true;
}
}
return false;
} else {
PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
return powerManager.isScreenOn();
}
}
private boolean filter(StatusBarNotification sbn) {
String packageName = sbn.getPackageName();
if (!globalEnabled() || !appEnabled(packageName)) {
return false;
}
boolean usingCustomSettings = isUsingCustomSettings(packageName);
SharedPreferences sp;
if (usingCustomSettings) {
sp = getSharedPreferences(getString(R.string.notification_settings_custom), MODE_PRIVATE);
} else {
sp = getSharedPreferences(getString(R.string.notification_settings_global), MODE_PRIVATE);
}
boolean isAn2linuxTestNotification = packageName.startsWith("kiwi.root.an2linuxclient");
if (dontSendIfScreenIsOn(sp, packageName, usingCustomSettings) && !isAn2linuxTestNotification) {
boolean screenIsOn = false;
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) {
// private as in samsung always-on feature, not sure if this is how it works
// https://stackoverflow.com/questions/2474367/how-can-i-tell-if-the-screen-is-on-in-android#comment71534994_17348755
boolean displayIsPrivate = (display.getFlags() & Display.FLAG_PRIVATE) == Display.FLAG_PRIVATE;
if (!displayIsPrivate) {
screenIsOn = true;
break;
}
}
}
} else {
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
if (powerManager.isScreenOn()){
screenIsOn = true;
}
}
if (screenIsOn) {
return false;
}
}
int flags = sbn.getNotification().flags;
if (isOngoing(flags) && blockOngoing(sp, packageName, usingCustomSettings)){
return false;
}
if (isForeground(flags) && blockForeground(sp, packageName, usingCustomSettings)){
return false;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH){
if (isGroupSummary(flags) && blockGroupSummary(sp, packageName, usingCustomSettings)){
return false;
}
if (isLocalOnly(flags) && blockLocalOnly(sp, packageName, usingCustomSettings)){
return false;
}
}
return priorityAllowed(sp, packageName, usingCustomSettings, sbn.getNotification().priority);
}
private boolean filter(StatusBarNotification sbn) {
String packageName = sbn.getPackageName();
if (!globalEnabled() || !appEnabled(packageName)) {
return false;
}
boolean usingCustomSettings = isUsingCustomSettings(packageName);
SharedPreferences sp;
if (usingCustomSettings) {
sp = getSharedPreferences(getString(R.string.notification_settings_custom), MODE_PRIVATE);
} else {
sp = getSharedPreferences(getString(R.string.notification_settings_global), MODE_PRIVATE);
}
boolean isAn2linuxTestNotification = packageName.startsWith("kiwi.root.an2linuxclient");
if (dontSendIfScreenIsOn(sp, packageName, usingCustomSettings) && !isAn2linuxTestNotification) {
boolean screenIsOn = false;
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) {
// private as in samsung always-on feature, not sure if this is how it works
// https://stackoverflow.com/questions/2474367/how-can-i-tell-if-the-screen-is-on-in-android#comment71534994_17348755
boolean displayIsPrivate = (display.getFlags() & Display.FLAG_PRIVATE) == Display.FLAG_PRIVATE;
if (!displayIsPrivate) {
screenIsOn = true;
break;
}
}
}
} else {
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
if (powerManager.isScreenOn()){
screenIsOn = true;
}
}
if (screenIsOn) {
return false;
}
}
int flags = sbn.getNotification().flags;
if (isOngoing(flags) && blockOngoing(sp, packageName, usingCustomSettings)){
return false;
}
if (isForeground(flags) && blockForeground(sp, packageName, usingCustomSettings)){
return false;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH){
if (isGroupSummary(flags) && blockGroupSummary(sp, packageName, usingCustomSettings)){
return false;
}
if (isLocalOnly(flags) && blockLocalOnly(sp, packageName, usingCustomSettings)){
return false;
}
}
return priorityAllowed(sp, packageName, usingCustomSettings, sbn.getNotification().priority);
}
@SuppressLint("NewApi")
public static boolean isScreenOn(@NonNull Context context) {
display_api:
if (Device.hasKitKatWatchApi()) {
DisplayManager dm = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
Display[] displays = dm.getDisplays(null);
Display display = null;
if (displays == null || displays.length == 0) {
break display_api;
} else if (displays.length > 1) {
Timber.tag(TAG).i("The number of logical displays is " + displays.length);
}
for (Display d : displays) {
final boolean virtual = Operator.bitAnd(d.getFlags(), Display.FLAG_PRESENTATION);
if (d.isValid() && !virtual) {
display = d;
final int type;
try {
Method method = Display.class.getDeclaredMethod("getType");
method.setAccessible(true);
type = (int) method.invoke(d);
} catch (Exception e) {
continue;
}
if (type == 1 /* built-in display */) {
break;
}
}
}
if (display == null) {
return false;
}
Timber.tag(TAG).i("Display state=" + display.getState());
return display.getState() == Display.STATE_ON;
}
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
return isInteractive(pm);
}