您的位置:首页 > 移动开发 > Android开发

Android 监听屏幕锁屏(听音频,看视频)

2017-06-07 19:35 288 查看
> 锁屏听音乐(音频),没有锁屏看视频

Android系统亮屏、锁屏、屏幕解锁事件(解决部分手机亮屏后未解锁即进入resume状态)- http://blog.csdn.net/oracleot/article/details/20378453
Android 实现锁屏的较完美方案- https://segmentfault.com/a/1190000003075989 https://github.com/android/platform_frameworks_policies_base/blob/master/phone/com/android/internal/policy/impl/KeyguardViewManager.java
Android 监听屏幕锁屏,用户解锁- http://blog.csdn.net/mengweiqi33/article/details/18094221
最近在做视频播放器的时候,遇到一个问题,在用户播放视频然后锁屏之后,视频播放器仍然在继续播放,遇到类似手机系统状态改变的问题的时候,首先想到了广播(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");

            }

        });

通过以上步骤即实现了对屏幕状态的监听.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: