Android 監聽鎖屏/開屏事件
1. 兩種方案
(1) 監聽BroadcastReceiver
(2)獲取PowerManager事件
2. BroadcastReceiver
2.1. 事件
總共有3個事件:
Intent.ACTION_SCREEN_ON : 屏幕點亮 Intent.ACTION_SCREEN_OFF :屏幕關閉 Intent.ACTION_USER_PRESENT: 用戶解鎖
2.2. 權限
監聽用戶解鎖需要在AndroidManifest中注冊權限
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
2.3. IntentFilter代碼
if (mContext != null) { IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_SCREEN_OFF); filter.addAction(Intent.ACTION_USER_PRESENT); mContext.registerReceiver(mScreenReceiver, filter); }
3. PowerManager
PowerManager manager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); if (manager.isScreenOn()) { if (mScreenStateListener != null) { mScreenStateListener.onScreenOn(); } } else { if (mScreenStateListener != null) { mScreenStateListener.onScreenOff(); } }
4. Code
import android.annotation.SuppressLint;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.PowerManager;/** * Created by xiyanglu on 4/11/15. */ public class ScreenObserver { private Context mContext; private ScreenBroadcastReceiver mScreenReceiver; private ScreenStateListener mScreenStateListener; public ScreenObserver(Context context) { mContext = context; mScreenReceiver = new ScreenBroadcastReceiver(); } public void startObserver(ScreenStateListener listener) { mScreenStateListener = listener; registerListener(); getScreenState(); } public void shutdownObserver() { unregisterListener(); } /** * 獲取screen狀態 */ @SuppressLint("NewApi") private void getScreenState() { if (mContext == null) { return; } PowerManager manager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); if (manager.isScreenOn()) { if (mScreenStateListener != null) { mScreenStateListener.onScreenOn(); } } else { if (mScreenStateListener != null) { mScreenStateListener.onScreenOff(); } } } private void registerListener() { if (mContext != null) { IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_SCREEN_OFF); filter.addAction(Intent.ACTION_USER_PRESENT); mContext.registerReceiver(mScreenReceiver, filter); } } private void unregisterListener() { if (mContext != null) mContext.unregisterReceiver(mScreenReceiver); } private class ScreenBroadcastReceiver extends BroadcastReceiver { private String action = null; @Override public void onReceive(Context context, Intent intent) { action = intent.getAction(); if (Intent.ACTION_SCREEN_ON.equals(action)) { // 開屏 mScreenStateListener.onScreenOn(); } else if (Intent.ACTION_SCREEN_OFF.equals(action)) { // 鎖屏 mScreenStateListener.onScreenOff(); } else if (Intent.ACTION_USER_PRESENT.equals(action)) { // 解鎖 mScreenStateListener.onUserPresent(); } } } public interface ScreenStateListener {// 返回給調用者屏幕狀態信息 public void onScreenOn(); public void onScreenOff(); public void onUserPresent(); } } </pre><br />
來自:
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!