2011-05-11 64 views
25

我想知道如何檢測屏幕昏暗或Android 1.6上的亮度。如何檢測API級別爲4時屏幕是打開還是關閉?

我發現在API級別7的解決方案很容易發展:

PowerManager pm = (PowerManager) 
getSystemService(Context.POWER_SERVICE); 
boolean isScreenOn = pm.isScreenOn(); 

但我需要爲Android 1.x的一個解決方案

你能建議我嗎?

謝謝。

回答

21

ACTION_SCREEN_ON的做法並沒有爲我工作。經過一些不同的解決方案,這段代碼終於爲我解決了這個問題:

/** 
* 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); 
     //noinspection deprecation 
     return pm.isScreenOn(); 
    } 
} 
+2

必須在我的OnePlus One上添加一個排除功能,因爲有一個名爲「Pen off-screen display」的顯示屏始終爲STATE_ON。除此之外,這工作很好,非常感謝! :) – tommed 2015-07-07 21:04:30

+0

我怎樣才能在後臺使用Display.getState()來檢查顯示器的狀態,或者當顯示器熄滅時我需要在後臺使用一些東西。任何想法? @tommed – 2015-12-07 06:12:13

+0

使用服務,在後臺檢查屏幕狀態與在android上檢查背景中的其他內容沒有什麼不同。 – tommed 2015-12-07 07:15:37