Android, как вывести задачу на первый план? - PullRequest
6 голосов
/ 03 августа 2011

Мой вопрос:

Как я могу запустить новое действие в своей собственной задаче, используя следующие правила.

1) Если действие уже существует как корень другой задачи (в том же приложении), то выведите задачу на передний план.Я не хочу, чтобы был создан еще один экземпляр Activity.Я просто хочу, чтобы Задача, из которой она состоит, вышла на передний план, а верхняя Активность Задачи была отображена.

Примечание: это будет только корень одной Задачи за раз, и он будет существовать только как корень Задачи и больше нигде.

2) Если Деятельность не существуетзатем создайте это действие в своей собственной задаче.

Почему я пытаюсь этого добиться?Я создал четыре основания в нижней части своей Деятельности, которые должны вести себя как вкладки.Поэтому, если я нажимаю вторую «вкладку», я хочу, чтобы отображалась активность, связанная с этой вкладкой.Но если оно уже существует и находится в нижней части его собственной Задачи, то я бы хотел, чтобы эта Задача отображалась с любым действием, которое в данный момент находится вверху Задачи.

Что я пробовал до сих пор?Я искал stackOverflow и не смог найти похожий вопрос.Я прочитал http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html и http://blog.akquinet.de/2010/04/15/android-activites-and-tasks-series-intent-flags/

Я думаю, мне нужно использовать либо FLAG_ACTIVITY_NEW_TASK и / или сходства, но не уверен.Ищете руку, пожалуйста.

Спасибо, Брэдли4

Ответы [ 4 ]

18 голосов
/ 13 августа 2013

Я смог решить эту проблему для версии Android> = Honeycomb:

@TargetApi(11)
protected void moveToFront() {
    if (Build.VERSION.SDK_INT >= 11) { // honeycomb
        final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        final List<RunningTaskInfo> recentTasks = activityManager.getRunningTasks(Integer.MAX_VALUE);

        for (int i = 0; i < recentTasks.size(); i++) 
        {
               Log.d("Executed app", "Application executed : " 
                       +recentTasks.get(i).baseActivity.toShortString()
                       + "\t\t ID: "+recentTasks.get(i).id+"");  
               // bring to front                
               if (recentTasks.get(i).baseActivity.toShortString().indexOf("yourproject") > -1) {                     
                  activityManager.moveTaskToFront(recentTasks.get(i).id, ActivityManager.MOVE_TASK_WITH_HOME);
               }
        }
    }
}

Вам также необходимо добавить их в манифест:

<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.REORDER_TASKS" />
0 голосов
/ 03 августа 2011

Как насчет FLAG_ACTIVITY_REORDER_TO_FRONT ?

0 голосов
/ 03 августа 2011

Вы можете установить Activity launch mode ( android: launchMode ) в AndroidManifest, чтобы он не создавал новые экземпляры сам, если он работает, но запускается нормальнокогда это не так.Затем вы можете запустить Activity, используя Intent .

0 голосов
/ 03 августа 2011

Вы должны использовать FLAG_ACTIVITY_CLEAR_TOP и FLAG_ACTIVITY_SINGLE_TOP при вызове startActivity ().

...