如何欺骗箭头键到我在Android上的活动

如何欺骗箭头键到我在Android上的活动,第1张

概述我试图覆盖音量按钮以用作上/下箭头键(即它们应将焦点移到我所有活动的可聚焦视图上.)为此,我重写了我的活动dispatchKeyEvent()方法,请注意,我也尝试了onKeyDown(),但是我的音量键事件的某些部分仍通过系统,当您更改音量时,我的设备具有可听见的反馈.我仍然可以听到蜂鸣声,但是音

我试图覆盖音量按钮以用作上/下箭头键(即它们应将焦点移到我所有活动的可聚焦视图上.)

为此,我重写了我的活动dispatchKeyEvent()方法,请注意,我也尝试了onKeyDown(),但是我的音量键事件的某些部分仍通过系统,当您更改音量时,我的设备具有可听见的反馈.我仍然可以听到蜂鸣声,但是音量实际上并未更改.切换到dispatchKeyEvent()消除了系统发出的提示音.

这是我当前的dispatchKeyEvent()方法:

@OverrIDepublic boolean dispatchKeyEvent(KeyEvent ke){    int keyCode = ke.getKeyCode();    if(ke.getAction() == KeyEvent.ACTION_DOWN){        print("press " + keyCode);        if(keyCode == KeyEvent.KEYCODE_VolUME_DOWN)         {             mTxt.postDelayed(pressDown, 600);            return true;        }else if(keyCode == KeyEvent.KEYCODE_VolUME_UP)         {             KeyEvent key = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_UP);             dispatchKeyEvent(key);             return true;        }     }else if(ke.getAction() == KeyEvent.ACTION_UP){        print("release " + keyCode);        if(keyCode == KeyEvent.KEYCODE_VolUME_DOWN)         {             /*KeyEvent keyUp = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_DOWN);             dispatchKeyEvent(keyUp);*/            return true;        }else if(keyCode == KeyEvent.KEYCODE_VolUME_UP)         {             KeyEvent keyUp = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_UP);             dispatchKeyEvent(keyUp);            return true;        }     }    return super.dispatchKeyEvent(ke);}

现在的设置方式是使用不同的上下技巧,但都无法正常工作以转移焦点.对于上移键,我只是手动调用dispatchKeyEvent(),将其传递给d-pad上移键,以及在音量按钮上执行的相同 *** 作(因此,当我按下它时应该按下,而在释放时应该释放)我的向上按钮的输出如下所示:

press 24press 19release 24release 19

对于下移按钮,我进行了一些微调,因为我认为也许在释放音量之前就已经发生了dpad按下的事实,所以我制作了一个可同时按下并释放dpad的可运行文件.

    pressDown = new Runnable(){        @OverrIDe        public voID run(){            KeyEvent key = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_DOWN);             dispatchKeyEvent(key);             KeyEvent keyUp = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_DOWN);             dispatchKeyEvent(keyUp);        }    };

我将其延迟了一秒钟,以便有机会释放音量.我的向下按钮的输出如下所示:

press 25release 25press 20release 20

如果我将USB键盘插入设备并按箭头键,焦点将正确移动,并且我看到向上的输出:

press 19release 19

而下来:

press 20release 20

唯一的区别(据我所知)是,当我按键盘上的箭头时焦点实际上正确移动,而当我按音量按钮(欺骗箭头按钮)时焦点根本不移动.

我在这里俯瞰什么吗?谁能帮助我弄清楚如何欺骗我的活动的箭头键,以便他们实际上可以正确地移动焦点?

解决方法:

我最终发现,您需要使用Instrumentation类发送键事件,并且出于某种原因,您必须在主线程之外进行 *** 作.以下是将上下发送的摘录:

new Thread(new Runnable() {            @OverrIDe   public voID run() {                        new Instrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);   }   }).start();new Thread(new Runnable() {            @OverrIDe   public voID run() {                        new Instrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_UP);   }   }).start();

如果您使用这些insdIE从问题中覆盖的dispatchKeyEvent,它将正确地移动焦点.

总结

以上是内存溢出为你收集整理的如何欺骗箭头键到我在Android上的活动全部内容,希望文章能够帮你解决如何欺骗箭头键到我在Android上的活动所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1095720.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存