在这里记录Android获取当前屏幕状态的方式。
一、通过Display类中的getState方法获得,代码如下
WindowManager windowManager = (WindowManager) mContext.getSystemService(WINDOW_SERVICE);
Display display = windowManager.getDefaultDisplay();
/**
* Gets the state of the display, such as whether it is on or off.
*
* @return The state of the display: one of {@link #STATE_OFF}, {@link #STATE_ON},
* {@link #STATE_DOZE}, {@link #STATE_DOZE_SUSPEND}, or {@link #STATE_UNKNOWN}.
*/
int screenState = display.getState();
二、通过接收广播获取
在屏幕状态变化(On/Off)时候,系统会发出广播,可以通过注册广播,进行判断当前屏幕状态。
可以接收如下两个广播ACTION_SCREEN_OFF 和 ACTION_SCREEN_ON:
/**
* Broadcast Action: Sent when the device goes to sleep and becomes non-interactive.
* <p>
* For historical reasons, the name of this broadcast action refers to the power
* state of the screen but it is actually sent in response to changes in the
* overall interactive state of the device.
* </p><p>
* This broadcast is sent when the device becomes non-interactive which may have
* nothing to do with the screen turning off. To determine the
* actual state of the screen, use {@link android.view.Display#getState}.
* </p><p>
* See {@link android.os.PowerManager#isInteractive} for details.
* </p>
* You <em>cannot</em> receive this through components declared in
* manifests, only by explicitly registering for it with
* {@link Context#registerReceiver(BroadcastReceiver, IntentFilter)
* Context.registerReceiver()}.
*
* <p class="note">This is a protected intent that can only be sent
* by the system.
*/
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_SCREEN_OFF = "android.intent.action.SCREEN_OFF";
/**
* Broadcast Action: Sent when the device wakes up and becomes interactive.
* <p>
* For historical reasons, the name of this broadcast action refers to the power
* state of the screen but it is actually sent in response to changes in the
* overall interactive state of the device.
* </p><p>
* This broadcast is sent when the device becomes interactive which may have
* nothing to do with the screen turning on. To determine the
* actual state of the screen, use {@link android.view.Display#getState}.
* </p><p>
* See {@link android.os.PowerManager#isInteractive} for details.
* </p>
* You <em>cannot</em> receive this through components declared in
* manifests, only by explicitly registering for it with
* {@link Context#registerReceiver(BroadcastReceiver, IntentFilter)
* Context.registerReceiver()}.
*
* <p class="note">This is a protected intent that can only be sent
* by the system.
*/
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_SCREEN_ON = "android.intent.action.SCREEN_ON";
目前知道这两种,发现别的方式再补充,欢迎高手指教~