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