asysbang

 找回密码
 立即注册
查看: 4813|回复: 0
打印 上一主题 下一主题

添加自定义的虚拟按键

[复制链接]

520

主题

2

好友

6551

积分

管理员

Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

最佳新人 活跃会员 热心会员 推广达人 宣传达人 灌水之王 突出贡献 优秀版主 荣誉管理 论坛元老

跳转到指定楼层
楼主
发表于 2015-7-13 17:46:17 |只看该作者 |倒序浏览
默认的虚拟按键位置有“返回”,"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

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|aSys-帮 ( 京ICP备13033689号 )

GMT+8, 2026-1-29 01:59 , Processed in 0.043993 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部