【Android 进阶】Android Home 键监听

作者: dongbingliu | 来源:发表于2017-06-15 23:18 被阅读271次

Android Home键监听

Android 普通键值可以直接在dispatchKeyEvent()中处理,但Home键,比较特殊,需要单独监听其广播,且必须为动态广播,其静态广播无效;

需求:Home键,设置 Kill 自己,但设置中有多个Activity,在每个Activiy 中年监听Home键广播不现实,必须把监听广播抽取出来在同一个类中实现,考虑到BaseActivity;

public class BaseActivity extends Activity {
    
    private HomeWatcherReceiver mHomeWatcherReceiver = null;
    private boolean isNeedFinish = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        registerReceiver();
    }
    
    public void setBackFinish(boolean flag) {
        isNeedFinish = flag;
    }
    
    private void registerReceiver() {
        mHomeWatcherReceiver = new HomeWatcherReceiver();
        IntentFilter filter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
        registerReceiver(mHomeWatcherReceiver, filter);
    }
    
    
    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        
        int KeyCode = event.getKeyCode();
        
        if (event.getAction() == KeyEvent.ACTION_DOWN) {
            if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
                this.finish();
                System.gc();
                return true;
            }
        }
        return super.dispatchKeyEvent(event);
    }
    public class HomeWatcherReceiver extends BroadcastReceiver {

        private static final String SYSTEM_DIALOG_REASON_KEY = "reason";
        private static final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";
        
        @Override
        public void onReceive(Context context, Intent intent) {

            String intentAction = intent.getAction();
            Log.i(MyAPP, "intentAction =" + intentAction);
            if (TextUtils.equals(intentAction, Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
                String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
                Log.i(MyAPP, "reason =" + reason);
                if (TextUtils.equals(SYSTEM_DIALOG_REASON_HOME_KEY, reason)) {
                    BaseActivity.this.finish();
                }
            }
        }

    }
    
    @Override
    protected void onDestroy() {
        super.onDestroy();
        
        if (mHomeWatcherReceiver != null) {
            try {
                unregisterReceiver(mHomeWatcherReceiver);
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

相关文章

  • 【Android 进阶】Android Home 键监听

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

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

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

  • 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键点击监听实现及思考

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

  • android监听home键按钮

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

网友评论

    本文标题:【Android 进阶】Android Home 键监听

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