简体   繁体   English

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

[英]Adding override for onKeyLongPress in Android Phonegap plugin

I am not too familiar with writing plugins for Android, however I would like to implement a long press function for the hardware search button in my Cordova application. 我对编写Android插件不太熟悉,但是我想在Cordova应用程序中为硬件搜索按钮实现长按功能。

I can successfully do it like this: 我可以成功地做到这一点:

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);
    }
}

But I am looking for a way to supply the onKeyLongPress override in a plugin and not by directly editing MyClass.java as above (the above was just POC). 但是我正在寻找一种在插件中提供onKeyLongPress覆盖的方法,而不是通过如上所述直接编辑MyClass.java来实现(上面只是POC)。

The way I understand it, is that it should be an override on MyClass, and not CordovaActivity. 据我了解,它应该是MyClass的替代,而不是CordovaActivity。 How can I extend MyClass via my plugin, assuming that my understanding is correct? 在我理解正确的前提下,如何通过插件扩展MyClass?

I am aware that one can add an event listener like this: 我知道可以添加这样的事件侦听器:

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

However my requirement is a long press. 但是,我的要求是长按。

I have tried the following: 我尝试了以下方法:

Creating my plugin and trying to extend my app's class: 创建我的插件并尝试扩展应用程序的类:

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);
    }
}

Creating my plugin and trying to extend CordovaActivity: 创建我的插件并尝试扩展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);
    }
}

Any pointers will be greatly appreciated. 任何指针将不胜感激。

I thought I would post my answer here if anybody ever has the same issue. 我以为如果有人遇到同样的问题,我会在这里发布答案。

I was able to achieve what I needed by doing the following: 通过执行以下操作,我可以实现所需的功能:

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;
        }
    }); 
}

And called the bindKeyEvents method from my plugin. 并从我的插件中调用bindKeyEvents方法。

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

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