美文网首页
android监听home键按钮

android监听home键按钮

作者: NewHigh | 来源:发表于2017-10-23 17:38 被阅读47次
  • 关于home键的监听,下面的方法是不管用的, 当然正常的BACK还是可以用的
  @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
           if (keyCode == KeyEvent.KEYCODE_HOME){
            L.e("按home键,这里是走不到的!");
      }

  }
  • 解决办法就是按home键,系统会发送一个广播
    • public static final String ACTION_CLOSE_SYSTEM_DIALOGS = "android.intent.action.CLOSE_SYSTEM_DIALOGS";所以就需要在广播中捕捉这个action来做处理了。
  • 下面的代码

public class HomeReceiverUtil {


    static final String SYSTEM_DIALOG_REASON_KEY = "reason";
    static final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";
    private static BroadcastReceiver mHomeReceiver = null;

    /**
     * 添加home的广播
     * @param context
     */
    public static void registerHomeKeyReceiver(Context context , final HomeKeyListener listener) {
        L.d("注册home的广播");
        mHomeReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                homeFinish(intent , context , listener);
            }
        };
        final IntentFilter homeFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);

        context.registerReceiver(mHomeReceiver, homeFilter);
    }

    /**
     * 注销home的广播
     * @param context
     */
    public static void unregisterHomeKeyReceiver(Context context) {
        L.d( "销毁home的广播");
        if (null != mHomeReceiver) {
            context.unregisterReceiver(mHomeReceiver);
            mHomeReceiver = null ;
            L.d("已经注销了,不能再注销了");
        }
    }

    private static void homeFinish(Intent intent, Context context, HomeKeyListener listener) {

        String action = intent.getAction();

        if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {

            String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);

            if (reason != null && reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {

                if (listener != null){
                    listener.homeKey();
                }
            }

        }
    }
//回调接口, 当然可以自己自行处理
    public interface HomeKeyListener{
        void homeKey();
    }
}

  • 下面就是在activity中的使用

这里的this要格外注意一下!这里的this要格外注意一下!这里的this要格外注意一下!
使用this了 必须在onPause中解绑,因为生命周期是先走onPause 在onCreate..的
当然吧this替换成getApplicationContext() 了 OnPause, onStop , onDestroy都可以解绑,
把下面的写到BaseActivity中就可以了

 //监听home按键  
//onCreate,onResume注册都行
        HomeReceiverUtil.registerHomeKeyReceiver(this, new HomeReceiverUtil.HomeKeyListener() {
            @Override
            public void homeKey() {
                Toast.makeText(HomeActivity.this, "这里做些处理", Toast.LENGTH_SHORT).show();
             
            }
        });

//记住,使用this了 必须在onPause中解绑,生命周期的原因!
    HomeReceiverUtil.unregisterHomeKeyReceiver(this);


相关文章

  • android监听home键按钮

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

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

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

  • 【Android 进阶】Android Home 键监听

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

  • [Flutter]监听Android返回键事件

    需求监听Android返回键按钮点击事件 实现通过 WillPopScope 可以实现对返回键点击事件的监听,通过...

  • 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键按钮

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