[英]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.