0

Javaプラグインは、アプリがバックグラウンドの間にデバイスのタイムゾーンが変更されると、TimezoneVariablesのブール値をtrue/falseに正常に更新します。ブール値を取得するためにアプリケーションが再開したら、私はプラグインを呼び出し、 "getIsTimezoneChanged is true"を出力しますが、 "timezone did change"は表示されません。Cordova exec success関数が呼び出されない(Android)

$ 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のプロキシ:あなたはネイティブ実装でコールバックを呼び出すことはありませんので、

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); 

答えて

1

ザッツ: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。 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; 
} 
関連する問題