博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 监听屏幕锁屏,用户解锁
阅读量:6693 次
发布时间:2019-06-25

本文共 3043 字,大约阅读时间需要 10 分钟。

最近在做视频播放器的时候,遇到一个问题,在用户播放视频然后锁屏之后,视频播放器仍然在继续播放,遇到类似手机系统状态改变的问题的时候,首先想到了广播(don't call me,i will call you);在网上搜罗了一个方法,做个总结;

public class ScreenListener {    private Context mContext;    private ScreenBroadcastReceiver mScreenReceiver;    private ScreenStateListener mScreenStateListener;    public ScreenListener(Context context) {        mContext = context;        mScreenReceiver = new ScreenBroadcastReceiver();    }    /**     * screen状态广播接收者     */    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();            }        }    }    /**     * 开始监听screen状态     *      * @param listener     */    public void begin(ScreenStateListener listener) {        mScreenStateListener = listener;        registerListener();        getScreenState();    }    /**     * 获取screen状态     */    private void getScreenState() {        PowerManager manager = (PowerManager) mContext                .getSystemService(Context.POWER_SERVICE);        if (manager.isScreenOn()) {            if (mScreenStateListener != null) {                mScreenStateListener.onScreenOn();            }        } else {            if (mScreenStateListener != null) {                mScreenStateListener.onScreenOff();            }        }    }    /**     * 停止screen状态监听     */    public void unregisterListener() {        mContext.unregisterReceiver(mScreenReceiver);    }    /**     * 启动screen状态广播接收器     */    private void registerListener() {        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);    }    public interface ScreenStateListener {
// 返回给调用者屏幕状态信息 public void onScreenOn(); public void onScreenOff(); public void onUserPresent(); }}

在上面的代码中,用到了动态注册广播,在需要监听屏幕状态的activity中,当不需要监听的时候,如activity finish的时候,使用unregisterListener解除广播监听;

下面是在Activity中调用;

ScreenListener l = new ScreenListener(this);        l.begin(new ScreenStateListener() {            @Override            public void onUserPresent() {                Log.e("onUserPresent", "onUserPresent");            }            @Override            public void onScreenOn() {                Log.e("onScreenOn", "onScreenOn");            }            @Override            public void onScreenOff() {                Log.e("onScreenOff", "onScreenOff");            }        });

通过以上步骤即实现了对屏幕状态的监听.

转载于:https://www.cnblogs.com/a284628487/p/3345317.html

你可能感兴趣的文章
js两个小技巧【看到了就记录一下】
查看>>
[React] React Fundamentals: Accessing Child Properties
查看>>
C#发送电子邮件 (异步) z
查看>>
SQL Server CLR全功略之一---CLR介绍和配置
查看>>
struts2.1.6教程二、struts.xml配置及例程
查看>>
memcached client --ref
查看>>
Oracle PL/SQL之LOOP循环控制语句
查看>>
Codeforces Round #301 (Div. 2) C. Ice Cave BFS
查看>>
logcat使用
查看>>
ajax请求模拟登录
查看>>
Python Tools for Machine Learning
查看>>
关于C++ const 的全面总结
查看>>
.NET条形码
查看>>
2015第23周五
查看>>
SICP第三章题解
查看>>
VSTO学习笔记(二)Excel对象模型
查看>>
通过boundingRectWithSize:options:attributes:context:计算文本尺寸
查看>>
解决Web部署 svg/woff/woff2字体 404错误
查看>>
压缩感知先进——关于稀疏矩阵
查看>>
ftoa浮法成字符串
查看>>