android监听home键按钮

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