2015-03-17 12 views
5

Mam działanie o nazwie "Podpis" i nazywam go z CordovaPlugin;Oddzwonienie z działania na Cordova

Plugin.java

public boolean execute(String action, JSONArray args, 
      CallbackContext callbackContext) throws JSONException 
    { 
    Intent i = new Intent(context, Signature.class); 
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    cordova.startActivityForResult(this,i,90); 
} 
    public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
     Log.d(TAG, "activity result in plugin: requestCode(" + requestCode + "), resultCode(" + resultCode + ")"); 
     if(requestCode == 90) { 
      if (resultCode == this.cordova.getActivity().RESULT_OK) { 
       Bundle res = intent.getExtras(); 
       String result = res.getString("results"); 
       Log.d("FIRST", "result:"+result); 
       this.callbackContext 
       .success(result.toString()); 
      } else { 
       this.callbackContext.error("Error"); 
      } 
    } 

Signature.java

private void finishWithResult(String result,int status) 
{ 
    Bundle conData = new Bundle(); 
    conData.putString("results", result); 
    Intent intent = new Intent(); 
    intent.putExtras(conData); 
    setResult(status, intent); 
    finish(); 
} 

Jednakże gdy zgłoszę funkcja "cordova.startActivityForResult" "onActivityResult" natychmiast wywołuje to samo. Nie mogę oddzwonić z Activity przez finishWithResult. Wszelkie porady. Dzięki

Odpowiedz

6

Po pierwsze nie było jakiegoś kodu (return-statement dla wykonać-metoda) i musisz powiedzieć android/cordova-plugin, aby czekać, aż nie jest wynik wysłany z powrotem do swojej aplikacji webview za pomocą NO_RESULT i setKeepCallback z PluginResult inaczej Cordova/android spodziewa się uzyskać wynik jak najszybciej wykonać -method zakończył:

Plugin.java:

public boolean execute(String action, JSONArray args, 
      CallbackContext callbackContext) throws JSONException 
    { 

    PluginResult r = new PluginResult(PluginResult.Status.NO_RESULT); 
    r.setKeepCallback(true); 
    callbackContext.sendPluginResult(r); 

    Intent i = new Intent(context, Signature.class); 
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    cordova.startActivityForResult(this,i,90); 

    return true; 

} 

public void onActivityResult(int requestCode, int resultCode, Intent intent){ 
    // here is your former code 
    ... 
    ... 
    // at last call sendPluginResult 
    this.callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result.toString())); 

    // when there is no direct result form your execute-method use sendPluginResult because most plugins I saw and made recently (Reminder) prefer sendPluginResult to success/error 
    // this.callbackContext.success(result.toString()); 
} 

Masz przykład here (dla twojej klasy wtyczek) i here (dla twojej klasy podpisu).

I jedno z moich: here i here.