Javascript Cordova插件-键盘事件Android
我正在努力为Android上的Cordova创建一个插件,该插件可以拦截硬件键盘事件,并将它们提供给Javascript侦听器。我以前也创建过其他插件,但我正在努力解决这个问题,因为我一开始对Java不是特别在行。下面代码段中的所有内容都可以编译,但Javascript端没有任何内容。在此感谢您的帮助 更新: 经过更多的研究,在Android的更高版本中,默认情况下关键事件被禁用。这是因为有一些借口说,使用如此多不同的输入设备和方法可以获得更好的用户体验。如果你是从头开始构建应用程序,这篇文章似乎提供了解决方案,但不是针对Cordova。有一些东西,可以为科尔多瓦工作,但它似乎入侵一个插件。我想覆盖CordovaWebView中的一些方法,但我不想重新初始化它。这是Javascript中的常见做法;有人知道如何在Java for Android中实现这一点吗 KeyboardPlugin.javaJavascript Cordova插件-键盘事件Android,javascript,java,android,cordova,Javascript,Java,Android,Cordova,我正在努力为Android上的Cordova创建一个插件,该插件可以拦截硬件键盘事件,并将它们提供给Javascript侦听器。我以前也创建过其他插件,但我正在努力解决这个问题,因为我一开始对Java不是特别在行。下面代码段中的所有内容都可以编译,但Javascript端没有任何内容。在此感谢您的帮助 更新: 经过更多的研究,在Android的更高版本中,默认情况下关键事件被禁用。这是因为有一些借口说,使用如此多不同的输入设备和方法可以获得更好的用户体验。如果你是从头开始构建应用程序,这篇文章似
package com.otb.cordova.keyboard;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaInterface;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CordovaWebView;
import org.apache.cordova.PluginResult;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.view.View;
import android.view.View.OnKeyListener;
import android.view.KeyEvent;
import android.view.*;
public class KeyboardPlugin extends CordovaPlugin implements OnKeyListener{
private CallbackContext keyup_callback = null;
private CallbackContext keydown_callback = null;
@Override
public boolean execute(String action, JSONArray data, CallbackContext callbackContext) throws JSONException {
if (action.equalsIgnoreCase("keyUp")) {
keyup_callback = callbackContext;
}
else if(action.equalsIgnoreCase("stopKeyUp")){
keyup_callback = null;
}
else if(action.equalsIgnoreCase("keyDown")){
keydown_callback = callbackContext;
}
else if(action.equalsIgnoreCase("stopKeyDown")){
keydown_callback = null;
}
else {
// invalid action
return false;
}
PluginResult result = new PluginResult(PluginResult.Status.NO_RESULT);
result.setKeepCallback(true);
callbackContext.sendPluginResult(result);
return true;
}
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_UP) {
KeyUp(keyCode, event);
}
else if (event.getAction() == KeyEvent.ACTION_DOWN) {
KeyDown(keyCode, event);
}
return false;
}
private boolean KeyDown(int keyCode, KeyEvent event){
if(keydown_callback == null){
return true;
}
PluginResult result = new PluginResult(PluginResult.Status.OK, Integer.toString(keyCode));
result.setKeepCallback(true);
keydown_callback.sendPluginResult(result);
return false;
}
private boolean KeyUp(int keyCode, KeyEvent event){
if(keyup_callback == null){
return true;
}
PluginResult result = new PluginResult(PluginResult.Status.OK, Integer.toString(keyCode));
result.setKeepCallback(true);
keyup_callback.sendPluginResult(result);
return false;
}
}
plugin.js
Plugin.keyboardPlugin = {
onKeyUp: function(callback, onFail){
cordova.exec(callback, onFail, 'KeyboardPlugin', 'keyUp', []);
},
onKeyDown: function(callback, onFail){
cordova.exec(callback, onFail, 'KeyboardPlugin', 'keyDown', []);
},
stopKeyUp: function(callback, onFail){
cordova.exec(callback, onFail, 'KeyboardPlugin', 'stopKeyUp', []);
},
stopKeyDown: function(callback, onFail){
cordova.exec(callback, onFail, 'KeyboardPlugin', 'stopKeyDown', []);
}
};
plugin.xml
<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
xmlns:android="http://schemas.android.com/apk/res/android"
id="cordova-plugin-keyboard"
version="0.0.1">
<name>Keyboard Plugin</name>
<description>This is a project to read key strokes from Cordova on Android.</description>
<license>Apache 2.0</license>
<keywords>cordova,plugin,keyboard</keywords>
<repo>https://github.com/mircerlancerous/cordova-plugin-keyboard</repo>
<issue>https://github.com/mircerlancerous/cordova-plugin-keyboard/issues</issue>
<engines>
<engine name="cordova-android" version=">=3.6.0" /><!-- Requires CordovaPlugin.preferences -->
</engines>
<js-module src="www/plugin.js" name="keyboardPlugin">
<runs/>
</js-module>
<platform name="android">
<config-file target="res/xml/config.xml" parent="/*">
<feature name="KeyboardPlugin" >
<param name="android-package" value="com.otb.cordova.keyboard.KeyboardPlugin"/>
<param name="onload" value="true" />
</feature>
</config-file>
<source-file src="src/android/KeyboardPlugin.java" target-dir="src/com/otb/cordova/keyboard"/>
</platform>
</plugin>
键盘插件
这是一个在Android上读取Cordova按键的项目。
Apache2.0
cordova、插件、键盘
https://github.com/mircerlancerous/cordova-plugin-keyboard
https://github.com/mircerlancerous/cordova-plugin-keyboard/issues
这是指向github存储库的链接。