2013-08-01 2 views
0

У меня есть два автономных приложения. Приложение A и приложение B. Я хочу начать работу в приложении B из приложения A и вернуть результаты. Я могу вызвать активность в приложении B из A, используя действие, но не могу вернуться в приложение A после завершения операции. OnActivityResult в A никогда не вызывается. Ниже приведен код.Android Явное намерение для результата

public void onClickBtnToApplicationB(View v) { 
     try { 
      final Intent intent = new Intent(Intent.ACTION_MAIN, null); 
      final ComponentName cn = new ComponentName("pakacagename","package.class"); 
      intent.setComponent(cn); 
      intent.setAction(Intent.ACTION_MAIN); 
      intent.addCategory(Intent.CATEGORY_LAUNCHER); 

      startActivityForResult(intent, REQUEST_CODE); 
     } catch (ActivityNotFoundException e) { 
     //handle Exception 
     } 
    } 

    public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
     switch (requestCode) { 
      case REQUEST_CODE: 
       handleResult(resultCode, intent); 
       break; 
     } 
    } 

    public void handleResult(int resultCode, Intent intentResult) { 
     switch (resultCode) { 
      case RESULT_OK: 
       String Result = intentResult.getStringExtra("RESULT"); 
       // I need Results from Application B here.. 
       break; 

      case RESULT_CANCELED: 
       break; 
     } 
     } 

Применение B:

Intent s = new Intent(1.this,2.class); 
startActivityForResult(s, REQUEST_CODE_B); 
protected void onActivityResult(int requestCode, int resultCode, Intent intentResult) {  
    switch(requestCode){ 
     case REQUEST_CODE_B: 
      handleResult(resultCode, intentResult); 
    } 
} 

public void handleResult(int resultCode, Intent intentResult) { 
    switch (resultCode) { 
    case RESULT_OK: 
     String scanResult = intentResult.getStringExtra("RESULT"); 
     Intent newintent = new Intent(); 
     newintent.putExtra("RESULT", scanResult); 
     setResult(Activity.RESULT_OK, newintent); 
     finish(); 
     break; 

    case RESULT_CANCELED: 
     break; 
} 
+0

Если вы используете явное намерение, ни одна из остальных инициализации намерения не требуется. StartActivityForResult (новый Intent (новое имя компонента («pakacagename», «package.class»)), REQUEST_CODE); должно сработать. –

ответ

1

Может быть, я что-то не хватает. Приложение A, похоже, запускает Activity в приложении B для результата и реализует onActivityResult. У того, как вы создали намерение для отправки, есть некоторые проблемы, но давайте пропустим это на мгновение.

Насколько я могу судить, форма намерения, которое вы отправляете, несущественна, потому что приложение B никогда не смотрит на него. У получающей операции должен быть вызов getIntent(). На основе входящего ACTION он устанавливает код результата и возвращает Intent, вызывает setResult(), а затем вызывает finish(). Ваш код не делает этого; вместо этого кажется, что вы пытаетесь запустить Application A, вызвав startActivityForResult().

Я понимаю, почему вы, возможно, попытался это, но последовательность должна быть:

  1. активность А хочет начать активность B (независимо от активности приложения Б).
  2. деятельности по конструкции Намерение Х, что соответствует активности B.
  3. активность А вызывает startActivityForResult (Х).
  4. Деятельность B выходит на передний план.
  5. Метод onResume() в действии B вызывает getIntent(). Это гарантирует, что активность B может выглядеть в Intent X, даже если B уже запущен.
  6. активность B делает действие, которое было запрашиваемую активность А.
  7. Когда это сделано, активность B ставит свои результаты в Intent Y.
  8. Деятельность B вызывает setResult (result_code, Y);
  9. Активность B вызывает finish(), который возвращает результат в Activity A.
  10. Вызывается метод onActivityResult() в Activity.

Результат Намерение Y не отправлено startActivityForResult; вместо этого он отправляется комбинацией setResult() и finish().

+0

Подробнее Объяснение: Приложения Активность вызова X в приложении B, X запускает другое действие для результата, пусть говорит Z. и OnActivityResult в X, я получаю свои результаты, которые будут перенесены в приложение A. Что я получил от вашего объяснения, я, получал бы результат от Z в X через onActivityResult и затем переносился в A в OnResume через 'aim Y = getintent(); y.putExtra («результат», результат); setResult (Активность.RESULT_OK, Y); finish(); ' ?? – Shah

+0

только с использованием getIntent() в onResume() работает для меня. благодаря – Shah

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

  • Нет связанных вопросов^_^