繁体   English   中英

在Android Phonegap插件中为onKeyLongPress添加替代

[英]Adding override for onKeyLongPress in Android Phonegap plugin

我对编写Android插件不太熟悉,但是我想在Cordova应用程序中为硬件搜索按钮实现长按功能。

我可以成功地做到这一点:

public class MyClass extends CordovaActivity 
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        super.init();
        // Set by <content src="index.html" /> in config.xml
        super.loadUrl(Config.getStartUrl());
        //super.loadUrl("file:///android_asset/www/index.html");
    }
    @Override
    public boolean onKeyLongPress(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_SEARCH) {
            Context cntx = getApplicationContext();
            Toast.makeText(cntx, "Long Press", Toast.LENGTH_SHORT).show();
            return true;
        }
        return super.onKeyLongPress(keyCode, event);
    }
}

但是我正在寻找一种在插件中提供onKeyLongPress覆盖的方法,而不是通过如上所述直接编辑MyClass.java来实现(上面只是POC)。

据我了解,它应该是MyClass的替代,而不是CordovaActivity。 在我理解正确的前提下,如何通过插件扩展MyClass?

我知道可以添加这样的事件侦听器:

document.addEventListener("searchbutton", function (e) {
    //Do stuff here
}, false);

但是,我的要求是长按。

我尝试了以下方法:

创建我的插件并尝试扩展应用程序的类:

public class MyPlugin extends MyClass 
{    
    @Override
    public boolean onKeyLongPress(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_SEARCH) {
            Context cntx = getApplicationContext();
            Toast.makeText(cntx, "Long Press", Toast.LENGTH_SHORT).show();
            return true;
        }
        return super.onKeyLongPress(keyCode, event);
    }
}

创建我的插件并尝试扩展CordovaActivity:

public class MyPlugin extends CordovaActivity 
{    
    @Override
    public boolean onKeyLongPress(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_SEARCH) {
            Context cntx = getApplicationContext();
            Toast.makeText(cntx, "Long Press", Toast.LENGTH_SHORT).show();
            return true;
        }
        return super.onKeyLongPress(keyCode, event);
    }
}

任何指针将不胜感激。

我以为如果有人遇到同样的问题,我会在这里发布答案。

通过执行以下操作,我可以实现所需的功能:

private void bindKeyEvents(){
    this.webView.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_SEARCH) {
                if (event.getAction() == KeyEvent.ACTION_UP){
                    Log.d("testApp", "Release");
                    return true;
                }
                if (event.getAction() == KeyEvent.ACTION_DOWN && event.isLongPress()){
                    Log.d("testApp", "Long Press");
                    return true;
                }
                if (event.getAction() == KeyEvent.ACTION_DOWN){
                    event.startTracking();
                    Log.d("testApp", "Press");
                    return true;
                }
            }
            return true;
        }
    }); 
}

并从我的插件中调用bindKeyEvents方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM