Обратно повикване от активност в Cordova

Имам дейност, наречена „Подпис“ и я наричам от 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");
             }
     }

Подпис.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. Някакви съвети. Благодаря


person engincancan    schedule 17.03.2015    source източник


Отговори (1)


Първо, липсваше някакъв код (изявление за връщане за изпълнение-метод) и трябва да кажете на android/cordova-plugin да изчака, докато има резултат, изпратен обратно към вашето приложение за webview чрез използване NO_RESULT и setKeepCallback на PluginResult в противен случай cordova/android очаква да получи резултат веднага щом методът execute завърши :

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

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

И един от моите: тук и тук.

person Blauharley    schedule 17.03.2015