2015-03-17 2 views
5

У меня есть деятельность под названием «Подпись», и я называю ее от CordovaPlugin;Обратный звонок от деятельности на Кордове

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

Однако, когда я вызвать функцию "cordova.startActivityForResult" "onActivityResult" сразу же вызывает это сам. Я не могу выполнить обратный вызов из Activity через finishWithResult. Любые советы. Благодаря

ответ

6

Прежде всего был некоторый код отсутствует (возвратное заявление для выполнить -метод), и вы должны сказать андроид/Cordova-плагину ждать, пока не будет результат отправлен обратно в WebView-приложение с помощи NO_RESULT и setKeepCallback из PluginResult иначе Cordova/Android ожидает получить результат, как только выполнить -метод закончил:

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

Имейте пример here (для вашего класса плагина) и here (для вашего класса подписи).

И один из моих: here и here.

Смежные вопросы