2014-02-18 2 views
1

Я написал PhoneGap Android плагин и там открыть вторую деятельность:PhoneGap Android Plugin - закрыть плагин активность

cordova.getActivity().runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      Context context = cordova.getActivity().getApplicationContext(); 
      Intent intent = new Intent(context, secondActivity.class); 
      cordova.getActivity().startActivity(intent); 
     } 
    }); 

Теперь я хотел бы, чтобы закрыть деятельность с кнопкой и отправить Plugin Результат к JavaScript, но я не могу закрыть действие и вернуться к приложению PhoneGap - как я могу это сделать?

Я надеюсь, что кто-то может мне помочь. Спасибо за все ответы.

ответ

6

В плагине, используйте startActivityForResult из CordovaInterface класса вместо startActivity от Android:

this.cordova.startActivityForResult(this,intent,0); 

(0 это значение INT используется для идентификации активности начали использовать другие номера, если вам необходимо запустить несколько мероприятий)

в вашей деятельности вы добавить следующую функцию, чтобы вернуть результат в плагин:

public void returnResult(int code, String result) { 
    Intent returnIntent = new Intent(); 
    returnIntent.putExtra("result", result); 
    setResult(code, returnIntent); 
    finish(); 
} 

Итак, когда вы хотите выйти из своей деятельности, вы вызываете эту функцию с RESULT_CANCELED или RESULT_OK и строкой, представляющей то, что вы хотите вернуть.

И, наконец, в классе плагина, добавьте следующую функцию:

public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    switch (requestCode) { 
    case 0: //integer matching the integer suplied when starting the activity 
     if(resultCode == android.app.Activity.RESULT_OK){ 
      //in case of success return the string to javascript 
      String result=intent.getStringExtra("result"); 
      this.callbackContext.success(result); 
     } 
     else{ 
      //code launched in case of error 
      String message=intent.getStringExtra("result"); 
      this.callbackContext.error(message); 
     } 
     break; 
    default: 
     break; 
    } 
} 

Надежда это то, что вы искали.

+0

Это то, что мне нужно, но это не сработало - у меня был класс Target.java, там у меня есть метод onClick (View v) в этом методе. Я открываю ответ Результат ('MainActivity act = new MainActivity() ; act.returnResult (android.app.Activity.RESULT_OK, result); ') Открытие returnResult работает, но оно не закрывает фактическую MainActivity и вызов onActivityResult в Plugin.java приводит к ошибке " к сожалению приложение остановилось ». Какая у меня ошибка? – rossse1906

+0

Когда вы находитесь в своем плагине, вы начинаете свое намерение, которое инициирует класс MainActivity, оттуда вы создаете целевой класс и из этого целевого класса вы пытаетесь создать новый экземпляр MainActivity, вот в чем проблема. Когда вы создаете целевой класс, вы должны передать ему ссылку на объект MainActivity (используя конструктор), а затем использовать этот ref для вызова returnResult вместо того, чтобы пытаться выполнить новую MainActivity. – QuickFix

+0

Спасибо, теперь он закрывает активность, но onActivityResult не вызывается. – rossse1906

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