在Android Phonegap插件中添加onKeyLongPress的覆盖

时间:2014-10-08 14:41:37

标签: java android cordova cordova-plugins

我不太熟悉为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);
    }
}

任何指针都将非常感激。

1 个答案:

答案 0 :(得分:0)

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

我通过以下方式实现了我所需要的目标:

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方法。