Cordova插件 - callbackContext.success不会返回调用插件的应用程序

时间:2018-04-06 09:59:52

标签: android cordova cordova-plugins

我目前正在开发一个Cordova插件来调用外部屏幕(来自.aar的SDK)并将结果返回给Cordova应用程序。

应用程序的预期流程:

  1. Cordova应用程序(HTML + JS)调用插件
  2. 插件调用SDK上的活动(.aar)
  3. SDK将显示多个屏幕(约3-5个屏幕)并通过广播
  4. 发送结果(Intent内的数据)
  5. 插件接收来自BroadcastReceiver的回复
  6. 插件调用callbackContext.sendPluginResult和callbackContext.success将数据返回给Cordova应用程序。 (插件
  7. Cordova应用程序从插件获得响应。
  8. 我当前的流程:

    1. Cordova应用程序(HTML + JS)调用插件
    2. 插件调用SDK上的活动(.aar)
    3. SDK将显示多个屏幕(约3-5个屏幕)并通过广播
    4. 发送结果(Intent内的数据)
    5. 插件接收来自BroadcastReceiver的回复
    6. 插件调用callbackContext.sendPluginResult和callbackContext.success将数据返回给Cordova应用程序
    7. SDK仍会显示SDK的最后一个屏幕(在日志中,我可以看到响应是否由BroadCastReceiver收到)
    8. 这是我的BroadcastReceiver代码:

      public class SDKResponseReceiver extends BroadcastReceiver {
          CallbackContext callbackContext;    
          public static final String LOG_TAG ="SDKResponseReceiver";
          public SDKResponseReceiver(CallbackContext callbackContext){
            this.callbackContext = callbackContext;
            Log.d(LOG_TAG,"SDKResponseReceiver Creation");
          }
          @Override
          public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            Log.d(LOG_TAG, "Broadcast received: " + action);
            String extraData = intent.getExtras().getString("EXTRA_DATA");
            Log.d(LOG_TAG, "Broadcast Data: " + extraData);
            Log.d(LOG_TAG,"Sending Plugin Result.1.");
            callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, extraData));
            Log.d(LOG_TAG,"Sending Plugin Result.2.");
            callbackContext.success(extraData);
            Log.d(LOG_TAG,"Sending Plugin Result.3.");
          }
      }
      

      问题:

      1. 仅仅拨打callbackContext.success或者是不够 callbackContext.failed返回应用程序?
      2. 有没有更好的方法呢? (我的方法是使用BroadcastReceiver来接收来自SDK的响应)。由于SDK是由第三方制作的,因此似乎很难要求他们改变发送响应的方式。

0 个答案:

没有答案