this.callbackContext = callbackContext;//store this for later
this.webView.getView().setOnKeyListener(this);//add listener
PluginResult pluginResult = new PluginResult(PluginResult.Status.NO_RESULT); // send no result cause the result will be sent by the listener
pluginResult.setKeepCallback(true);
this.callbackContext.sendPluginResult(pluginResult);
然后我以这种方式覆盖侦听器:
@Override
public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {
JSONObject result = new JSONObject();
if (keyEvent.getAction() == KeyEvent.ACTION_DOWN) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_UP || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
{
try {
result.put("button", "button pressed");
} catch (JSONException err) {
}
}
PluginResult pr = new PluginResult(PluginResult.Status.OK, result);
pr.setKeepCallback(keepCallback);
this.callbackContext.sendPluginResult(pr);
return false;
}
return true;
}
在离子性方面,我可以看到插件正确地发送了结果,但似乎增加了一些怪异的行为:当从离子性中收到事件时,我的代码需要启动一个动画(角度动画),该动画已启动但尚未完成。它似乎卡住了。如果在收到事件后以任何方式与ui进行交互(例如,如果我只点击屏幕,一切都将再次开始工作),则该应用将再次响应如果我以其他方式触发动画,动画将完美运行。
以这种方式创建动画:
@Component({
...
animations: [
trigger('buttonAnimation', [
state('normal', style({
'transform': 'scale(1.0)'
})),
state('big', style({
'transform': 'scale(1.2)',
})),
transition('* => *', animate('.1s ease'))
]),
]
})
更新:
我以这种方式在模板文件中应用了动画
<button>
<i (click)="onButtonPressed()" [@buttonAnimation]="buttonState" (@buttonAnimation.done)="onAnimationEnd()"></i>
</button>
以及来自cordova插件的回调通过设置变量来触发动画
enter code here this.buttonState = 'big';
然后重新使用动画初始化
onAnimationEnd() { this.buttonState = 'normal' }
以这种方式使用cordova插件开始动画:
cordova.plugins.buttonListener.listenButtonClick(data => { this.buttonState = 'big'; }, err => { });
我正在开发自定义的cordova插件(目前为Android),可与Ionic一起使用。该插件使用以下代码将侦听器添加到WebView:this.callbackContext = callbackContext; //存储此...
constructor(private ref: ChangeDetectorRef){}
ngOnInit() {
cordova.plugins.buttonListener.listenButtonClick(data => {
this.buttonState = 'big';
this.ref.detectChanges();
}, err => { });
}