2016-09-02 11 views
2

Мой MainActivity поддерживает новый многооконный режим Android N. Тем не менее, я бы хотел, чтобы мой AwesomeActivity НЕ поддерживал многооконный режим.Запуск нового действия, которое не поддерживает многооконные окна

Я попробовал следующее:

AndroidManifest.xml

<activity 
    android:name=".activities.MainActivity" 
    android:label="@string/app_name" 
    android:windowSoftInputMode="stateHidden"/> 
<activity android:name=".activities.AwesomeActivity" 
    android:resizeableActivity="false" /> 

MainActivity.java

Intent intent = new Intent(this, AwesomeActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(intent); 
//removing CLEAR_TOP and SINGLE_TOP has no effect either 
//Intent.FLAG_ACTIVITY_CLEAR_TASK in conjunction with Intent.FLAG_ACTIVITY_NEW_TASK does not have an effect either 

Я подумал, что, добавив Intent.FLAG_ACTIVITY_NEW_TASK (с или без Intent.FLAG_ACTIVITY_CLEAR_TASK), это будет означать, что AwesomeActivity будет корневой активностью в своем стеке задач, и поэтому я не смог бы перейти в многооконный режим на AwesomeActivity.

Однако это не сработает, я все же могу переключиться в режим нескольких окон от AwesomeActivity, что не является желательным поведением.

Хотя комбинация Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK кажется, работает для запуска AwesomeActivity это не работает в том смысле, что если поместить приложение в фоновом режиме, в то время как в AwesomeActivity, затем довести AwesomeActivity обратно на первый план, вы будете не в состоянии вернитесь в MainActivity, поскольку он был удален из стека задач. Я считаю, что в большинстве случаев пользователь захочет вернуться к MainActivity, поэтому этого решения недостаточно.

+0

Что вы 'targetSdkVersion'? Что-то изменится, если вы удалите 'CLEAR_TOP' и' SINGLE_TOP' (которые вам не нужны AFAIK)? – CommonsWare

+0

Я удалил 'CLEAR_TOP' и' FLAG_ACTIVITY_SINGLE', и он все еще не работает. – Vinnie

+0

@CommonsWare TargetSdkVersion is 24 – Vinnie

ответ

-1

добавить это и попробовать, я не подтверждал андроида: resizeableActivity = «ложных»

Пожалуйста, проверьте эту ссылку для помощи https://developer.android.com/guide/topics/ui/multi-window.html#overview

+1

Он уже установил 'android: resizeableActivity =" false "' для своей деятельности, как вы можете видеть в вопросе. – Michael

+0

Этот тег для приложения, он подает заявку на активность. Калеб попробовал применить это к тегу приложения, то есть

+0

Да, но я не хочу отключать многократное окно для всего приложения. – Vinnie

0

FLAG_ACTIVITY_NEW_TASK оказывается недостаточным. Используя оба FLAG_ACTIVITY_NEW_TASK и FLAG_ACTIVITY_MULTIPLE_TASK работы:

 startActivity(new Intent(MainActivity.this, ActivityTwo.class) 
     .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_MULTIPLE_TASK)); 
+0

Если вы сделаете это, попробуйте поместить приложение в фоновом режиме во время ActivityTwo, а затем верните его на передний план, затем нажмите мягкую кнопку возврата. Приложение закроется, так как MainActivity был удален из стека задач. Это не желаемое поведение. – Vinnie

+0

@ Калеб: Ну, НАЗАД возвращает вас только в задание. Вы можете сделать другую задачу видимой с помощью 'android: taskAffinity' (в этом случае вам не нужно' FLAG_ACTIVITY_MULTIPLE_TASK'), но BACK в вашей задаче, не изменяемой по размеру, по-прежнему будет выгружать вас обратно на начальном экране по умолчанию при уничтожении корень задачи. Вам нужно будет сделать некоторые фантазии shenanigans в 'onBackPressed()' из AwesomeActivity', чтобы направить пользователя в другое место. Или сделайте оба действия не изменяемыми по размеру или сделайте оба действия изменяемыми по размеру. Я не знаю других вариантов здесь. – CommonsWare