Javascript WebView&;关键事件

Javascript WebView&;关键事件,javascript,android,webview,keyevent,Javascript,Android,Webview,Keyevent,我在创建Web视图和加载URL的活动中遇到了密钥码问题。我注意到,当我按下键盘上的键或红外遥控器上的按钮时,它不会在WebView中调用onKeyDown()方法。我猜它直接调用底层JavaScript(只要传递正确的键码就可以了) 我遇到的问题是,我的红外遥控器上的一些键只是被传递为0(如指南、信息、彩色按钮,它们都用于播放相关选项)。但是,有些键可以工作(例如数字按钮)。知道钥匙密码在哪里被劫持了吗?我检查了EventHub和InputDispatcher,他们似乎有正确的代码。我需要检查c

我在创建Web视图和加载URL的活动中遇到了密钥码问题。我注意到,当我按下键盘上的键或红外遥控器上的按钮时,它不会在WebView中调用onKeyDown()方法。我猜它直接调用底层JavaScript(只要传递正确的键码就可以了)

我遇到的问题是,我的红外遥控器上的一些键只是被传递为0(如指南、信息、彩色按钮,它们都用于播放相关选项)。但是,有些键可以工作(例如数字按钮)。知道钥匙密码在哪里被劫持了吗?我检查了EventHub和InputDispatcher,他们似乎有正确的代码。我需要检查chromium/android_webview代码库中的某个地方吗?下面是我使用的一个片段:

private class myWV extends WebView
{
    public myWV(Context context)
    {
        super(context);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    {
        Log.e("myWV", "onKeyDown: " +keyCode);
        return super.onKeyDown(keyCode, event);
    }
}


@Override
public void onCreate(Bundle icicle) 
{
    Log.d(TAG, "onCreate");
    Toast.makeText(getApplicationContext(), "Please wait while we look for available TV channels...", Toast.LENGTH_LONG).show();

    super.onCreate(icicle);

    mWebView = new myWV(this);
    mWebView.setWebViewClient(new WebViewClient());
    mWebView.setWebChromeClient(new WebChromeClient());

    Log.e(TAG, "onCreate: Calling setJavaScriptEnabled");
    mWebView.getSettings().setJavaScriptEnabled(true);

    mWebView.loadUrl(mURL);

    // Enable the view
    setContentView(mWebView);
}

如果您能找到Chromium中处理关键事件的代码片段,将不胜感激。刚刚在那里添加了我的特殊按键&它现在像一个符咒一样工作

查看WebView.onKeyDown的文档-它提到:
不要依靠它来捕捉软件按键。
您正在使用哪个API级别或Android版本?据我所知,4.0和4.1/4.2在处理各种事件方面略有不同,而4.1/4.2和4.4之间差异很大,因为后者已切换到Chromium Webkit引擎。@Wie WANG,我在4.4.2上。我可以肯定的是,在一个简单的活动(非基于WebView)中使用这些远程键代码时,它们工作得非常好。不知何故,在这个应用程序中,它们正在被重新解释(可能在Chromium的webview中?)。我终于找到了WebView进行本机调用的地方&查看Guide的ASCII[via event->getUnicodeChar()]值为0(显然是错误的),而例如字母“g”正确地将其设置为103。它是translateAndSendNativeEvents()。因此,我加入了一个解决方案,为我的向导按钮发送正确的ASCII代码,但它仍然不起作用!!然后我发现本机代码甚至没有使用这个ASCII值,它只是使用扫描代码,这是硬件id&这是正确的。我在这里仍然不知所措。。。