美文网首页
Android监听Home键

Android监听Home键

作者: Topone | 来源:发表于2021-09-03 14:39 被阅读0次
package com.lenovo.styluspen.utils;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;

public class HomeWatcherUtils{

    private static final String TAG = "HomeWatcher";
    private Context mContext;
    private IntentFilter mFilter;
    private OnHomePressedListener mListener;
    private InnerRecevier mRecevier;

    // 回调接口
    public interface OnHomePressedListener {
        public void onHomePressed();
        public void onHomeLongPressed();
    }

    public HomeWatcher(Context context) {
        mContext = context;
        mFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
    }

    /**
     * 设置监听
     *
     * @param listener
     */
    public void setOnHomePressedListener(OnHomePressedListener listener) {
        mListener = listener;
        mRecevier = new InnerRecevier();
    }

    /**
     * 开始监听,注册广播
     */
    public void startWatch() {
        if (mRecevier != null) {
            mContext.registerReceiver(mRecevier, mFilter);
        }
    }

    /**
     * 停止监听,注销广播
     */
    public void stopWatch() {
        if (mRecevier != null) {
            mContext.unregisterReceiver(mRecevier);
        }
    }

    /**
     * 广播接收者
     */
    class InnerRecevier extends BroadcastReceiver {
        final String SYSTEM_DIALOG_REASON_KEY = "reason";
        final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";
        final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";
        final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";

        @Override
        public void onReceive(Context context, Intent intent){
            String action = intent.getAction();
            if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
                String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
                if (reason != null) {
                    LogUtils.i("action:" + action + ",reason:" + reason);
                    if (mListener != null){
                        if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)){
                            // 短按home键
                            mListener.onHomePressed();
                        }else if (reason.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)){
                            // 长按home键
                            mListener.onHomeLongPressed();
                        }
                    }
                }
            }
        }
    }
}

调用时注意:

在初始化调用(如onCreate)时添加如下代码:

HomeWatcher mHomeWatcher = new HomeWatcher(this); 
        mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener(){ 
            @Override 
            public void onHomePressed()  { 
                //按了HOME键 
            } 
            @Override 
            public void onHomeLongPressed(){ 
                //长按HOME键
            } 
        }); 
        mHomeWatcher.startWatch();

在程序销毁时(如:onDestroy)时添加如下代码:

if(mHomeWatcher != null)
        mHomeWatcher.stopWatch();// 在销毁时停止监听,不然会报错的。 

相关文章

  • Android监听home键(附带广播的使用)

    如果想监听home键,实现方式有几种第一种方式:Android 对home键的监听,加上了权限,必须取得对处理ho...

  • 【Android 进阶】Android Home 键监听

    Android Home键监听 Android 普通键值可以直接在dispatchKeyEvent()中处理,但H...

  • Android HOME键点击监听实现及思考

    Android手机HOME键的监听一直是个很头疼的问题,系统禁止用户重写HOME键的监听方法,就导致部分手机可能出...

  • Android 监听Home键

    网上有很多监听home键的方法但是有很多都监听不到,今天总结一个相对来说比较方便和简单的方法。 当用户点击系统层级...

  • Android监听home键

    1、在需要监听home键的activity添加广播,生成一个成员变量: private final Broadca...

  • Android 监听 Home 键

  • Android Home 键监听

    之前的一个项目需要监听home键的事件,发现用dispatchKeyEvent无法实现监听,后来查了些资料,才知道...

  • Android 监听Home 键

    对于Home键的监听不是那么容易,因为Home键可以将程序退出放在后台,所以这个事件是直接分发给系统,系统接收到之...

  • Android监听Home键

    调用时注意: 在初始化调用(如onCreate)时添加如下代码: 在程序销毁时(如:onDestroy)时添加如下代码:

  • android监听home键按钮

    关于home键的监听,下面的方法是不管用的, 当然正常的BACK还是可以用的 解决办法就是按home键,系统会发送...

网友评论

      本文标题:Android监听Home键

      本文链接:https://www.haomeiwen.com/subject/rprkwltx.html