Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t在android应用程序(Kotlin)上使用硬件键盘检测按键_Android_Kotlin_Keyboard_Onkeyup_Android Hardware Keyboard - Fatal编程技术网

Can';t在android应用程序(Kotlin)上使用硬件键盘检测按键

Can';t在android应用程序(Kotlin)上使用硬件键盘检测按键,android,kotlin,keyboard,onkeyup,android-hardware-keyboard,Android,Kotlin,Keyboard,Onkeyup,Android Hardware Keyboard,我正在为我的android电视盒创建一个简单的应用程序,它使用一个webview对象来显示一些流式URL,并使用遥控器(硬件键盘)的PGup和PGdown在它们之间进行选择 我正在覆盖onKeyUp方法,但不幸的是,我的应用程序似乎没有检测到任何按键。 这是一些代码摘录: package com.dm.tutorialwebview import android.os.Bundle import android.support.v7.app.AppCompatActivity import a

我正在为我的android电视盒创建一个简单的应用程序,它使用一个webview对象来显示一些流式URL,并使用遥控器(硬件键盘)的PGup和PGdown在它们之间进行选择

我正在覆盖onKeyUp方法,但不幸的是,我的应用程序似乎没有检测到任何按键。 这是一些代码摘录:

package com.dm.tutorialwebview

import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.view.KeyEvent
import android.view.Menu
import android.webkit.WebChromeClient
import android.webkit.WebView
import android.webkit.WebViewClient
import android.util.Log
import android.view.MotionEvent


class MainActivity : AppCompatActivity() {

    var webview: WebView? = null
    data class Channel(val number: Int, val name:String, val url: String )

    object ChannelList {
        private val list = mutableListOf<Channel>()
        private var curChannel: Int = 0
[..]
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        ChannelList.addItem(Channel(1,"channel1","https://...3"))
        ChannelList.addItem(Channel(2,"channel2","https://..."))
        ChannelList.addItem(Channel(3,"channel3","https://..."))

        webview = findViewById(R.id.myweb)
        webview!!.webViewClient = WebViewClient()
        webview!!.settings.javaScriptEnabled = false
        webview!!.webChromeClient = WebChromeClient()
        webview!!.settings.domStorageEnabled = true
        webview!!.settings.builtInZoomControls = false     
        webview!!.settings.setSupportZoom(false)           
        webview!!.overScrollMode = WebView.OVER_SCROLL_NEVER
        webview!!.settings.useWideViewPort = true
        webview!!.setInitialScale(1)

        webview!!.loadUrl(ChannelList.getChannelUrl())

    }

    override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean {
        Log.i("TAG", "onKeyUp is been called");
        return when (keyCode) {
            KeyEvent.KEYCODE_PAGE_UP -> {
                ChannelList.nextChannel()
                webview!!.loadUrl(ChannelList.getChannelUrl())
                true
            }
            KeyEvent.KEYCODE_PAGE_DOWN -> {
                ChannelList.prevChannel()
                webview!!.loadUrl(ChannelList.getChannelUrl())
                true
            }
            KeyEvent.KEYCODE_1 -> {
                ChannelList.setChannel(1)
                webview!!.loadUrl(ChannelList.getChannelUrl())
                true
            }
            else -> super.onKeyUp(keyCode, event)
        }

    }


}
package com.dm.tutorialwebview
导入android.os.Bundle
导入android.support.v7.app.AppActivity
导入android.view.KeyEvent
导入android.view.Menu
导入android.webkit.WebChromeClient
导入android.webkit.WebView
导入android.webkit.WebViewClient
导入android.util.Log
导入android.view.MotionEvent
类MainActivity:AppCompatActivity(){
var webview:webview?=null
数据类通道(val编号:Int,val名称:String,val url:String)
对象通道列表{
private val list=mutableListOf()
专用通道:Int=0
[..]
}
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
ChannelList.addItem(频道(1,“频道1”,”https://...3"))
ChannelList.addItem(频道(2,“频道2”,”https://..."))
频道列表.附加项(频道(3,“频道3”和“https://..."))
webview=findviewbyd(R.id.myweb)
webview!!.webViewClient=webViewClient()
webview!!.settings.javaScriptEnabled=false
webview!!.webChromeClient=webChromeClient()
webview!!.settings.domStorageEnabled=true
webview!!.settings.builtInZoomControls=false
webview!!.settings.setSupportZoom(false)
webview!!.overScrollMode=webview.OVER\u滚动\u从不
webview!!.settings.useWideViewPort=true
webview!!.setInitialScale(1)
webview!!.loadUrl(ChannelList.getChannelUrl())
}
重写onKeyUp(keyCode:Int,event:KeyEvent):布尔值{
Log.i(“标记”,“调用onKeyUp”);
返回时间(键代码){
KeyEvent.KEYCODE\u页面\u向上->{
ChannelList.nextChannel()
webview!!.loadUrl(ChannelList.getChannelUrl())
真的
}
KeyEvent.KEYCODE\u页面\u向下->{
ChannelList.prevChannel()
webview!!.loadUrl(ChannelList.getChannelUrl())
真的
}
KeyEvent.KEYCODE_1->{
ChannelList.setChannel(1)
webview!!.loadUrl(ChannelList.getChannelUrl())
真的
}
else->super.onKeyUp(键码,事件)
}
}
}
方法onKeyUp似乎根本没有被触发。 有没有关于这段代码可能有什么问题的提示


谢谢和问候

谢谢@Ashwini violet,我用dispathKeyEvent替换了onKeyUp

我使用了一种变通方法,将输入限制为每250ms一个;不是很有礼貌,但很有效

    var lastclick : Long = 0
    var keyDelay : Int = 250        
    
    [..]

    override fun dispatchKeyEvent(event: KeyEvent?): Boolean {
    return when (event!!.keyCode) {
        KeyEvent.KEYCODE_PAGE_UP , KeyEvent.KEYCODE_DPAD_UP -> {
            if ((SystemClock.currentThreadTimeMillis() - lastclick) < keyDelay) true
            else {
                ChannelList.nextChannel()
                webview!!.clearHistory()
                webview!!.clearCache(true)
                showChannelName()
                webview!!.loadUrl(ChannelList.getChannelUrl())
                lastclick = SystemClock.currentThreadTimeMillis()
                true
            }
        }
var lastclick:Long=0
var键延迟:Int=250
[..]
覆盖fun dispatchKeyEvent(事件:KeyEvent?):布尔值{
返回时间(事件!!.keyCode){
KeyEvent.KEYCODE\u页面向上,KeyEvent.KEYCODE\u DPAD\u向上->{
如果((SystemClock.currentThreadTimeMillis()-lastclick)
我不确定,但我认为您可以在活动中覆盖dispatchKeyEvent()。在其中输入一些日志,检查您是否可以在此OneHanks中捕获事件。dispatchKeyEvent()似乎可以工作。是否有方法增加轮询间隔?按pageUP时,它会向前移动几页。谢谢。