2016-11-20 5 views
2

I''ve получил следующий поток вызовов:Вернись к предыдущей деятельности с помощью намерения

Внешнего приложения -> Моей деятельности A -> Открыть браузер -> Моей активности B

От внешнего приложения, с помощью startActivityForResult можно начать мою деятельность A. Деятельность A может открыть браузер, чтобы увидеть веб-сайт, с веб-сайта, пользователь может нажать ссылку и открыть ссылку с активностью B. Теперь я хотел бы закрыть B и вернуться А. Как я могу это сделать? Если я позвоню finish() на B, я вижу браузер.

ответ

2

Вы можете начать деятельность A снова из деятельности B с Intent.FLAG_ACTIVITY_CLEAR_TOP флаг намерения. До этого также необходимо изменить launch mode о деятельности А в манифесте, сделать это нечто иное, чем standard

Intent intent = new Intent(this, ActivityA.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent); 

Я заметил, что, если вы не измените режим запуска на активности А, другие виды деятельности, находящиеся на верхняя часть activity A по-прежнему будет очищена, но onNewIntent не будет называться, потому что активность будет уничтожена и снова воссоздана.

+0

Существует только одна проблема: A вызывается с помощью startActivityForResult из другого приложения, поэтому, если я вызываю его из B, я могу изменить намерение A, полученное из внешнего приложения. – greywolf82

+0

Вы можете сохранить входящее намерение в состоянии активности, а затем на 'onNewIn tent' вы можете проанализировать одно и то же сохраненное намерение, вместо намерения, переданного 'onNewIntent'. – mallaudin

+0

Да, это хорошая стратегия, я думал, что это даже способ поставить браузер и B в новую «задачу» и позволить B закрыть «задачу», включая активность браузера, но я не знаю, возможно – greywolf82

1

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

@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
protected static int moveToFront(Context ctx) { 
    int result = 0; 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { // honeycomb 
     final ActivityManager activityManager = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE); 
     final List<RunningTaskInfo> recentTasks = activityManager.getRunningTasks(Integer.MAX_VALUE); 

     for (int i = 0; i < recentTasks.size(); i++) 
     { 
       O.Log.d(TAG, "Application executed : " 
         +recentTasks.get(i).baseActivity.toShortString() 
         + "\t\t ID: "+recentTasks.get(i).id+""); 
       // bring to front     
       if (recentTasks.get(i).baseActivity.toShortString().indexOf(PACKAGE_NAME) > -1) {      
        activityManager.moveTaskToFront(recentTasks.get(i).id, ActivityManager.MOVE_TASK_WITH_HOME); 
        result = 1; 
        break; 
       }else{ 
        result = 2; 
       } 
     } 
    } 
    return result; 
} 

Полученные значения:

0 - старый Android версии 1 - ок 2 - вина

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