Android dispatchKeyEvent , onKeyDown 回调不适用于手势音量控制(华为 mate 30 pro)

     2023-04-13     189

关键词:

【中文标题】Android dispatchKeyEvent , onKeyDown 回调不适用于手势音量控制(华为 mate 30 pro)【英文标题】:Android dispatchKeyEvent , onKeyDown callbacks not working with gesture volume control (Huawei mate 30 pro) 【发布时间】:2021-10-14 16:09:24 【问题描述】:

我添加了 dispatchKeyEvent 和 onKeyDown 来检测活动中的音量变化事件,这在具有物理音量按钮的设备上运行良好。在华为 mate 30 pro 的情况下,上述事件不会触发,因为它没有物理音量按钮,而是控制音量的手势。 有什么办法吗??

 override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean 
    d(TAG, "signal onKeyDown $keyCode")
    when (keyCode) 
        KeyEvent.KEYCODE_HOME -> 
            d(TAG, "signal onKeyDown KEYCODE_HOME")
            if (alertDialog != null && alertDialog?.isShowing == true) 
                releaseDataAndFinishActivity()
            
           
            return false
        
        KeyEvent.KEYCODE_BACK -> 
            onBackPressed()
            return false
        
        KeyEvent.KEYCODE_VOLUME_DOWN -> 
            updateVolumeOnKeyPress(false)
            return true
        
        else -> return true
    


override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean 
    if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) 
        updateVolumeOnKeyPress(true)
        return true
    
    return false


override fun dispatchKeyEvent(event: KeyEvent?): Boolean 
    d(TAG, "signal dispatchKeyEvent $event")
    return super.dispatchKeyEvent(event)

【问题讨论】:

hi@Muhammad Ali,请问您使用的是哪种手势? hi@Muhammad Ali,根据团队的说法,华为 P40 Pro 是物理按钮,而不是虚拟按钮。能否请您重新确认一下手机的型号? @shirley 抱歉,这是华为 mate 30 pro,不是 p40。 【参考方案1】:

关于如何在 Mate30 Pro 上检测 Activity 中的音量变化事件,您可以通过收听android.media.VOLUME_CHANGED_ACTION 广播来实现。

【讨论】:

我无法在 prod 中使用此操作,因为它不适用于所有设备。其次,它不是 SDK 的一部分,将来可能会被删除。 link 根据团队的说法,目前Android没有定义这样的硬件。这是华为提供的,没有标准接口。如果您不想使用它,可能没有其他方法。 ?

androidtv焦点原理源码解析

...码比较长,下面我就慢慢来讲解一下具体的每一个细节。dispatchKeyEvent方法返回true代表焦点事件被消费了。ViewGroup的dispatchKeyEvent()方法的源码如下:(2)ViewGroup的dispatchKeyEvent执行流程(3)下面再来瞧瞧view的dispatchKeyEvent方法的... 查看详情

重写dispatchkeyevent方法按返回键back执行两次的解决办法

重写dispatchKeyEvent方法按返回键back执行两次的解决方法@Override  public boolean dispatchKeyEvent(KeyEvent event) {          if(event.getK 查看详情

使用 Chrome DevTools 协议 Input.dispatchKeyEvent 或 Input.dispatchMouseEvent 发送事件

】使用ChromeDevTools协议Input.dispatchKeyEvent或Input.dispatchMouseEvent发送事件【英文标题】:UsingChromeDevToolsProtocolInput.dispatchKeyEventorInput.dispatchMouseEventtosendanevent【发布时间】:2017-11-2009:09:11【问题描述】:我正在编写一个DSL,它将通过Go... 查看详情

覆盖Android上的删除键?

...发布时间】:2012-12-2809:19:31【问题描述】:我主要解决了dispatchKeyEvent中这些行的问题:byte[]cmdLeft=(byte)27,(byte)\'[\',(byte)\'D\';byte[]cmdErase=(byte)27,(byte)\'[\',(byte)\'P\';mSession.appe 查看详情

android以编程方式获取按键

...【问题讨论】:【参考方案1】:尝试在您的活动中使用dispatchKeyEvent(KeyEventevent):@Overridepublic 查看详情

覆盖Android中的电源按钮

...我无法处理按下电源按钮的操作。我尝试使用onKeyDown()和dispatchKeyEvent()方法,但似乎没有任何效果。谁能建议我解决这个问题的任何其他方法或解决方案。publicboolea 查看详情

android对话框dialog拦截activity事件通知(代码片段)

...,是给activity使用的。示例:这是一个Activity中的dispatchKeyEvent事件,或者外接刷卡机器监听事件。需要activity处理的。@OverridepublicbooleandispatchKeyEvent(KeyEventevent)if(event.getAction()==KeyEvent.ACTION_DOWN)intkeyCode=event.ge... 查看详情

android对话框dialog拦截activity事件通知(代码片段)

...,是给activity使用的。示例:这是一个Activity中的dispatchKeyEvent事件,或者外接刷卡机器监听事件。需要activity处理的。@OverridepublicbooleandispatchKeyEvent(KeyEventevent)if(event.getAction()==KeyEvent.ACTION_DOWN)intkeyCode=event.ge... 查看详情

android对话框dialog拦截activity事件通知(代码片段)

...,是给activity使用的。示例:这是一个Activity中的dispatchKeyEvent事件,或者外接刷卡机器监听事件。需要activity处理的。@OverridepublicbooleandispatchKeyEvent(KeyEventevent)if(event.getAction()==KeyEvent.ACTION_DOWN)intkeyCode=event.ge... 查看详情

如何以编程方式关闭 Android 中的共享系统对话框?

...createChooser调用的。【问题讨论】:不确定,可以试试this.dispatchKeyEv 查看详情

android如何实现监听软键盘收起按钮的点击事件

...监听改成收起的那个键就行了呗?追问点击收起按钮时,dispatchKeyEvent()这个方法都进不去啊,改了也没用啊追答那就不知道了没做过晚上回家之后再试了 参考技术B请问一下,那个收起键按钮是那个值呢? 参考技术C有用 查看详情

如何使用 KeyEventDispatcher

...到任何可用的方法来使用KeyEventDispatcher。它甚至不会启动dispatchKeyEvent()方法。我将如何使用它?提前 查看详情

androidwebview中的js如何监听键盘事件

...javascript的alert()、confirm()事件了。参考技术A重写Activity的dispatchKeyEvent(KeyEventevent)方法,在其中监听KeyEventKey.KEYCODE_ENTER键(右下角确定键),当此键按下的时候,隐藏输入法软键盘,设置edittext内容和加载webview内容。重写dispatchKeyEv... 查看详情

androidtv中按键事件和焦点处理总结(代码片段)

...TV端的开发。文章目录1.KeyEvent事件keyEvent2.KeyEvent事件分发dispatchKeyEvent()3.焦点处理Focus焦点放大处 查看详情

androidtv按键焦点事件分发流程详解

...调。在上述按键事件的入口中提到的ViewRootImpl中如果mView.dispatchKeyEvent(event)返回true,则结束事件分发;如果返回false,则调用如下方法继续执行后续的焦点导航流程。焦点导航的总体流程就是:1、Viewfocused=mView.findFocus();//从视图... 查看详情

android版本api对应表

Android版本ApiAndroid13.0(T)32Android12.0(S)31Android11.0(R)30Android10.0(Q)29Android9.0(Pie)28Android8.1(Oreo)27Android8.0(Oreo)26Android7.1(Nougat)25Android7.0(Nougat)24Android6.0(Marshmallow)23Android5.1(Lollipop)22Android5.0(Lollipop)21Android4.4W(KitKatWear)20Android4.4(KitKat)19Android4.3(Je... 查看详情

android逆向android权限(android逆向中使用的android.permission权限|android系统中的linux用户权限)

文章目录一、Android逆向中使用的android.permission权限二、Android系统中的Linux用户权限一、Android逆向中使用的android.permission权限Android逆向中使用的权限:android.permission.SET_DEBUG_APP:调试程序,应用有该权限后,可以指定调试相关的程序;an... 查看详情

android逆向android权限(android逆向中使用的android.permission权限|android系统中的linux用户权限)

文章目录一、Android逆向中使用的android.permission权限二、Android系统中的Linux用户权限一、Android逆向中使用的android.permission权限Android逆向中使用的权限:android.permission.SET_DEBUG_APP:调试程序,应用有该权限后,可以指定调试相关的程序;an... 查看详情