2012-06-30 2 views
1

У меня есть два приложения, на которые я назову приложение A и приложение B. Приложение B - это приложение с одной задачей и обычно, если вы запустите это приложение с главного экрана и используйте кнопку «Назад», вы не сможете вернуться на главный экран. Теперь предположим, что приложение A необходимо вызвать приложение B с помощью намерения. Если пользователь затем использует кнопку «Назад» в приложении B, я действительно хочу, чтобы они вернулись в приложение A. Но поскольку я переопределяю кнопку «Назад», невозможно вернуться в приложение A с помощью кнопки «Назад».Запретить закрытие приложения SingleTask при возврате вызывающему приложению

Как я могу вернуться в приложение A, но убедитесь, что приложение B остается запущенным, если оно запущено, когда приложение A называется? Если приложение B не было запущено, когда приложение A назвало его, приложение B должно быть выключено (уничтожено) при нажатии кнопки «Назад».

Я использую Android 2,2

UPDATE:

Я попытался следующие:

@Override 
    public void onBackPressed() 
    { 
    try 
    { 
     if (this.returnToClient) 
     moveTaskToBack (true); 

     this.returnToClient = false; 
    } 
    catch (Exception ex) 
    { 
    } 
    } 

Я установил returnToClient истинное значение, если активность запускается вызывающим приложение, проверив некоторые пачки данных который проходит.

Теперь, если я нажму кнопку «Назад», приложение B переместится на задний план, и приложение A появится на переднем плане. Выглядит неплохо. Теперь, если я нажимаю кнопку «Домой», а затем запускаю приложение «В», приложение «В» просто выбирает, где оно остановилось. Также хорошо. Теперь плохая часть. Если я долгое время нажимаю кнопку «Домой», чтобы открыть список истории, а затем нажать значок для приложения B, метод onNewIntent будет вызываться точно так же, как и с теми же данными, которые передаются, как если бы приложение A инициировало Мероприятия. Поэтому я предполагаю, что Android рассматривает запуск приложения с главного экрана, отличный от того, что он из списка History. Зачем? Понятия не имею. Кажется, что история связана с , кто запустил последнее действие и сохраняет данные пакета как часть этой истории. Это странно, и это приводит к нежелательному поведению, при котором приложение B выглядит так, как будто его вызвали из приложения A.

ответ

1

Имейте AppA запустите AppB, используя намерение с EXTRA, которое указывает, что оно было запущено из AppA, примерно так:

Intent intent = new Intent(this, AppB.class); 
intent.putExtra("returnToAppA", "true"); 
startActivity(intent); 

Затем, когда AppB зажимаем клавишу «назад», он может проверить, если он был запущен из AppA и если да, то он может вернуться в Аппа, как это:

Intent intent = new Intent(this, AppA.class); // Use the starting 
               // (root) Activity of AppA here 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(intent); 

Установка FLAG_ACTIVITY_NEW_TASK обеспечит новый экземпляр AppA не будет создан, но он будет jus t вернуться к существующей задаче, содержащей AppA.

+0

Смотрите мое ОБНОВЛЕНИЕ в исходном посте. Я не верю, что ваше решение будет работать, потому что приложение B не должно запускать экземпляр приложения A. Приложение A предоставляется другими (а не мной) и может привести к созданию новых экземпляров, чего вы не хотите. – AndroidDev

+0

Проверьте, есть ли намерение после длинного нажатия 'FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY'. Возможно, вы можете использовать это, чтобы различать случаи. –

+0

Сочетание моего решения выше и проверка на FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY. – AndroidDev

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