【问题标题】:Cordova exec success function not called (Android)未调用 Cordova exec 成功函数 (Android)
【发布时间】:2018-01-31 05:48:37
【问题描述】:

如果应用在后台时设备的时区发生变化,Java 插件会成功将 TimezoneVariables 中的布尔值更新为 true/false。当应用程序恢复获取布尔值时,我调用我的插件,它会打印“getIsTimezoneChanged is true”,但不会打印“timezone did change”。

$log.debug javascript 函数可以正常工作,就像 console.log 一样。如果有人能告诉我为什么没有调用 exec successcallback,相关代码如下。

Java 代码:

@Override
public boolean execute(String action, JSONArray data, CallbackContext callbackContext) throws JSONException {
    if(action.equals("createTimezoneChangeListener")) {
        TimezoneVariables.setCallbackContext(callbackContext);
        TimezoneVariables.setIsTimezoneChanged(false);
    }else if(action.equals("checkTimezoneChange")){
        if (TimezoneVariables.getIsTimezoneChanged()){
            Log.d("TimezoneUpdater","getIsTimezoneChanged is true");
            TimezoneVariables.setIsTimezoneChanged(false);
            return true;
        } else return false;        
    }
    return true;
}

Javascript 代理:

function TimezoneUpdater()
{

}

TimezoneUpdater.prototype = {
    checkTimezoneChange: function (changedCallback) {
        cordova.exec(changedCallback, null, "TimezoneUpdater", "checkTimezoneChange", []);
    }
}

module.exports = {
    createTimezoneChangeListener: function(){       
        cordova.exec(null, null, "TimezoneUpdater", "createTimezoneChangeListener", []);        
        return new TimezoneUpdater();
    }
};

www javascript 代码:

  var ref = window.timezoneUpdater.createTimezoneChangeListener();
  document.addEventListener("resume", function(){
    ref.checkTimezoneChange(function(){
      //Timezone did change while app was in the background
      $log.debug("timezone did change");
    });
  }, false);

【问题讨论】:

    标签: android cordova ionic-framework phonegap-plugins cordova-plugins


    【解决方案1】:

    那是因为您从未在本机实现中调用回调。 Cordova 不会自动调用你的成功回调函数,你必须像这样使用CallbackContext

    if (TimezoneVariables.getIsTimezoneChanged()) {
      callbackContext.success("timezone changed"); // you can pass whatever you want here
      return true;
    else {
      callbackContext.error("timezone did not change"); // you have to pass an error callback for that too
      return false;
    }
    

    【讨论】:

      猜你喜欢
      • 2013-08-04
      • 1970-01-01
      • 2023-03-08
      • 2013-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多