Cordova自定义插件-在Java中的run方法完成之前要执行回调方法

时间:2018-10-24 13:44:53

标签: android cordova cordova-plugins android-runonuithread

我开发了一个cordova自定义插件。插件运行良好,但是在运行方法执行之前调用了回调函数。它显示“无效操作”。

我想在运行方法完成时调用成功回调方法。以下是我的文件

1。离子应用程序中的提供程序文件(ts文件)

@Cordova({
    successIndex : 1,
    errorIndex : 2,
    observable: true
  })
  triggerWid(options: any): Observable<any> {
    return;
  }

2。 ts文件中的插件调用方法

triggerWidget() {

    const watch = this.payment.triggerWid({
      _sMessage: "Hello World"
    }).subscribe((result) => {
      alert(JSON.stringify(result, undefined, 2));
    }, (err) => {
      alert(JSON.stringify(err, undefined, 2));
    });

3。插件js文件

module.exports.triggerWid = function(arg0, success, error) {
    exec(success, error, 'TestPayment', 'triggerWid', [arg0]);
}

4。 Java文件

if (action.equals("triggerWid")) {
            String message = args.getString(0);
            this.triggerWid(message, callbackContext);
        }

我正在从同一文件中调用triggerWid方法。

private void triggerWid(String message, CallbackContext callbackContext) {
        Context context = this.cordova.getActivity().getApplicationContext();
         WidgetBuilder widgetBuilder = new WidgetBuilder()
                .setApiKey(LIQUIDPAY_API_KEY)
                .setApiSecret(LIQUIDPAY_SECRET_KEY)
                .setApplicationContext(context)
                .build();
        try {
            widgetBuilder.run(new WidgetInterface() {
                @Override
                public void onExit() {
                    // result_status.setTextColor(Color.BLACK);
                    // result_status.setText(R.string.done);
                    CALLBACK_MESSAGE = "Done";
                    callbackContext.success("Done");
                    new Utils().showToast(context, "Widget Triggered");

                }
            });
        } catch (IllegalStateException e) {
            Log.e("WIDGET ACCESS", e.getMessage());
            CALLBACK_MESSAGE = e.getMessage();
            callbackContext.error("Error");
        }

        // callbackContext.success(CALLBACK_MESSAGE);
    }

在上述功能中,我收到无效的操作。但是,如果取消注释callbackContext.success(CALLBACK_MESSAGE),则成功的回调函数将被执行,但在两次调用该函数后会显示结果。

我想只在onExit方法之后才调用成功回调方法。

这是可以实现的吗?

0 个答案:

没有答案