android 中全局键的处理GlobalKeyManager

来源:互联网 发布:做菜软件 编辑:程序博客网 时间:2024/06/09 22:01

如何使用快捷键跳转到指定的页面中,在android中的GlobalKeyManager中可以进行相关处理。

frameworks\base\core\res\res\xml\global_keys.xml指定了按键和对应的ComponentName,对于这个文件的修改,一般是使用android的overlay机制,对device进行自己的设置。
如下

 <global_keys version="1">    <!-- Example format: keyCode = keycode to handle globally. component = component which will handle this key. -->    <key keyCode="183" component="com.test.hotkey/com.test.hotkey.hotkeyActivity" /></global_keys>

看下GlobalKeyManager中对全局键的处理

    boolean handleGlobalKey(Context context, int keyCode, KeyEvent event) {        if (mKeyMapping.size() > 0) {            ComponentName component = mKeyMapping.get(keyCode);            if (component != null) {                Intent intent = new Intent(Intent.ACTION_GLOBAL_BUTTON)                        .setComponent(component)                        .putExtra(Intent.EXTRA_KEY_EVENT, event);                context.sendBroadcastAsUser(intent, UserHandle.CURRENT, null);                return true;            }        }        return false;    }

android原本处理是将其发送广播到指定的ComponentName,
稍作修改,将其改为启动指定的ComponentName的activity即可

private void openApk(ComponentName componentName) {        Intent mintent = new Intent();        mintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);        mintent.setComponent(componentName);        try {            mContext.startActivity(mintent);        } catch (Exception e) {            e.printStackTrace();        }    }boolean handleGlobalKey(Context context, int keyCode, KeyEvent event) {        if (mKeyMapping.size() > 0) {            ComponentName component = mKeyMapping.get(keyCode);            if (component != null) {                                openApk(component);                return true;            }        }        return false;    }
原创粉丝点击