asysbang

标题: 添加自定义的虚拟按键 [打印本页]

作者: admin    时间: 2015-7-13 17:46
标题: 添加自定义的虚拟按键
默认的虚拟按键位置有“返回”,"HOME","最近使用"3个虚拟按键

一些厂商会添加“音量+/-”和“截屏”,“下载管理”

这个是在systemui.apk里面

navigation_bar.xml中添加一项KeyButtonView

可以通过systemui:keyCode="3" 这个属性来设置点击时发送的按键消息

KeyButtonView.java中可以看到

解析的mCode值是通过sendEvent

    void sendEvent(int action, int flags, long when) {
        final int repeatCount = (flags & KeyEvent.FLAG_LONG_PRESS) != 0 ? 1 : 0;
        final KeyEvent ev = new KeyEvent(mDownTime, when, action, mCode, repeatCount,
                0, KeyCharacterMap.VIRTUAL_KEYBOARD, 0,
                flags | KeyEvent.FLAG_FROM_SYSTEM | KeyEvent.FLAG_VIRTUAL_HARD_KEY,
                InputDevice.SOURCE_KEYBOARD);
        InputManager.getInstance().injectInputEvent(ev,
                InputManager.INJECT_INPUT_EVENT_MODE_ASYNC);
    }

如果其他应用也想发送back或者home按键消息
可以在NavigationBarView.java中参考watchForDevicePolicyChanges函数添加一个自定义的receiver
然后
            ((KeyButtonView)getBackButton()).sendEvent(KeyEvent.ACTION_DOWN, 0);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            ((KeyButtonView)getBackButton()).sendEvent(KeyEvent.ACTION_UP, 0);

需要把sendEvent方法改成public






欢迎光临 asysbang (http://www.asysbang.com/) Powered by Discuz! X2.5