我不太熟悉为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);
}
}
任何指针都将非常感激。
答案 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方法。