android开发之手机屏幕状态的监听
来源:互联网 发布:ce教程找怪物数组基址 编辑:程序博客网 时间:2024/06/08 13:45
android开发之手机屏幕状态的监听
直接上工具类
public class ScreenObserverUtil { private static String TAG = "ScreenObserver"; private Context mContext; private ScreenBroadcastReceiver mScreenReceiver; private ScreenStateListener mScreenStateListener; private static Method mReflectScreenState; public ScreenObserverUtil(Context context) { mContext = context; mScreenReceiver = new ScreenBroadcastReceiver(); try { mReflectScreenState = PowerManager.class.getMethod("isScreenOn", new Class[] {}); } catch (Exception nsme) { LogUtils.d(TAG, "API < 7," + nsme); } } /** * screen状态广播接收者 */ private class ScreenBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_SCREEN_ON.equals(intent.getAction())) { mScreenStateListener.onScreenOn(); } else if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction())) { mScreenStateListener.onScreenOff(); } else if (Intent.ACTION_USER_PRESENT.equals(intent.getAction())) { mScreenStateListener.onUserPresent(); } } } /** * 请求screen状态更新 */ public void requestScreenStateUpdate(ScreenStateListener listener) { mScreenStateListener = listener; startScreenBroadcastReceiver(); firstGetScreenState(); } /** * 第一次请求screen状态 */ private void firstGetScreenState() { PowerManager manager = (PowerManager) mContext .getSystemService(Activity.POWER_SERVICE); if (isScreenOn(manager)) { if (mScreenStateListener != null) { mScreenStateListener.onScreenOn(); } } else { if (mScreenStateListener != null) { mScreenStateListener.onScreenOff(); } } } /** * 停止screen状态更新 */ public void stopScreenStateUpdate() { mContext.unregisterReceiver(mScreenReceiver); } /** * 启动screen状态广播接收器 */ private void startScreenBroadcastReceiver() { 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); } /** * screen是否打开状态 */ private static boolean isScreenOn(PowerManager pm) { boolean screenState; try { screenState = (Boolean) mReflectScreenState.invoke(pm); } catch (Exception e) { screenState = false; } return screenState; } // 外部调用接口 public interface ScreenStateListener { public void onScreenOn(); public void onScreenOff(); public void onUserPresent(); } public final static boolean isScreenLocked(Context c) { android.app.KeyguardManager mKeyguardManager = (KeyguardManager) c .getSystemService(c.KEYGUARD_SERVICE); return mKeyguardManager.inKeyguardRestrictedInputMode(); }
在外部需要监听的地方实现ScreenStateListener 接口,即可实现监听屏幕状态的效果,分别在屏幕熄灭,打开和解锁运行onScreenOn(),onScreenOff(),onUserPresent()三个方法。
0 0
- android开发之手机屏幕状态的监听
- android源码开发之监听来电状态
- Android手机屏幕变化监听
- Android之监听phone的通话状态
- Android之来电状态的监听
- android开发键盘状态监听
- Android开发之EditText 详解(addTextChangedListener监听用户输入状态)
- Android开发之旅一监听程序的前后台运行状态
- Android TV开发之监听网线,WiFi,蓝牙,U盘的状态
- Android开发——监听Android手机的网络状态
- Android开发动态的监听网络状态的变化
- Android开发动态的监听网络状态的变化
- Android开发监听判断网络连接状态的方法
- Android开发中获取手机屏幕的大小
- Android开发_获取手机屏幕的尺寸
- Android学习之 监听网络连接状态的改变
- Android开发之监听发出的短信
- Android开发之监听发出的短信
- iOS利用UIPageViewController实现图片轮播图
- 算法竞赛入门经典(第2版)习题2-5
- (13.1.3.10)PMBOK之三:十大知识领域之干系人管理
- 查找次最大数
- 关于cookie需要设置路径以及cookie域
- android开发之手机屏幕状态的监听
- Python 网络编程
- main和_main的区别
- Transform脚本控制游戏对象的变换
- 让div同行显示的方式
- Visual Leak Detector 2.5.1最新版使用方法
- Python挑战游戏汇总
- 【iOS_Development】frame VS bounds
- testparm命令