2016-11-24 7 views
1

Сценарий - У меня нет приложения, работающего в фоновом режиме. У меня есть приемник для ACTION_USER_PRESENT. В этом приемнике я начала деятельности которого проявляются следующие настройки:Активность не отображается в андресах

<activity android:name=".activity.MyActivityB" 
     android:excludeFromRecents="true" 
     android:noHistory="true" 
     android:screenOrientation="portrait"/> 

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

С этой целью я запускаю другое действие на некоторое нажатие кнопки. Эта новая MyNewActivity активность запускается с этим:

Intent intent = new Intent(MyActivityB.this, MyNewActivity.class); 
       intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       this.startActivity(intent); 
       Intent closeintent = new Intent("MAIN_ACTIVITY_CLOSE"); 
       closeintent.putExtra("action", "close"); 
       LocalBroadcastManager.getInstance(this).sendBroadcast(closeintent); 
       MyActivityB.this.finish(); 

Теперь моя новая деятельность должна появиться в, если я списка недавних долгое нажатие кнопки домой или кнопку Недавних.

Но проблема в том, что когда я нажимаю home MyNewActivity не отображается в ответах.

MyNewActivity определяется в манифесте, как это:

<activity 
     android:name=".activity.MyNewActivity" 
     android:label="@string/app_name" 
     android:screenOrientation="portrait" /> 

, что я делаю неправильно и почему не MyNewActivity появляется в недавних приложений.

ответ

0

Следует ли исключить задачу, инициированную этим действием, из списка недавно использованных приложений, обзорный экран. То, что является, когда это действие является корневой активностью новой задачи, этот атрибут определяет, должна ли задача не появляться в списке последних приложений. Установите «true», если задача должна быть исключена из списка; set «false», если он должен быть включен. Значение по умолчанию неверно".

Из этого android:excludeFromRecents удаляются все действия в текущей задаче. В android все действия в приложении имеют одинаковую близость и относятся к одной и той же Задаче, если вы не укажете. В вашем случае, когда новое действие начинается с той же задачи, что и ваша деятельность previouse, а система Android также удаляет новую активность из недавнего списка. Поэтому вам нужно указать android:taskAffinity в манифесте для каждой активности в манифесте, и это исправит вашу проблему.

Для получения более подробной информации, пожалуйста, обратитесь к android documentation.

Fix: Использование андроида: taskAffinity

<activity android:name=".activity.MyActivityB" 
     android:excludeFromRecents="true" 
    android:taskAffinity=".MyActivityB" 
     android:noHistory="true" 
     android:screenOrientation="portrait"/> 

<activity 
     android:name=".activity.MyNewActivity" 
    android:taskAffinity=".MyNewActivity" 
     android:label="@string/app_name" 
     android:screenOrientation="portrait" /> 
+0

Если я дать сродство задачи к обеим из них, того MyNewActivity запускается и отображается в списке недавних, но если мое приложение было тогда в фоновом режиме с основной деятельностью, то есть два экземпляра моего приложения показан в списке недавних – beginner

+0

Дайте то же значение taskaffinity для всех действий, и для MyActivityB получится отличное значение. – Swapnil

+0

Если я не назначаю никакую другую активность и только для MyActivityB, тогда это означает, что другие имеют одинаковую близость (по умолчанию). – beginner

1

удалить android:excludeFromRecents="true" из вашего menifest. потому что он удалит ваше приложение из ретентатов.

+0

Только удаление этого не помогает. – beginner

+0

Вы сталкиваетесь с такой же проблемой после удаления этой строки –

+0

Частичный ответ, но не полный – beginner

3

Согласно документу android:excludeFromRecents

Задача инициированного этой деятельности должны быть исключены из списка недавно использованных приложений, на обзорном экране. То есть, когда это действие является корневой активностью новой задачи, этот атрибут определяет, не должна ли задача отображаться в списке последних приложений.

По умолчанию все действия приложения имеют одинаковую близость. Концепции с такой же близостью относятся к одной и той же задаче. Следовательно, в этом случае оба MyActivityB и MyNewActivity принадлежат к одной и той же задаче.android:excludeFromRecents гарантирует, что задача не указана в последних приложениях.

Именно поэтому, когда android:excludeFromRecents установлено в true для MyActivityB, MyNewActivity исчезает из истории.

Решение:

android:taskAffinity Используйте для определения различных задач как для деятельности. Используйте android:excludeFromRecents для MyActivityB, если эта задача вообще не должна отображаться в истории.

<activity android:name=".activity.MyActivityB" 
     android:taskAffinity=".MyActivityB" 
     android:excludeFromRecents="true" 
     android:noHistory="true" 
     android:screenOrientation="portrait"/> 

<activity 
     android:name=".activity.MyNewActivity" 
     android:taskAffinity=".MyNewActivity" 
     android:label="@string/app_name" 
     android:screenOrientation="portrait" /> 
+0

Если я придаю задаче близость к обоим из них, тогда MyNewActivity запускается и отображается в recents, но если мое приложение было тогда в фоновом режиме с основным действием, тогда есть два примера моего приложения, которые показаны в ответах. – beginner

+0

Дайте одинаковое значение taskaffinity для всех действий («. MainActivity»), а для MyActivityB - другое значение («MyActivityB») – Swapnil

+1

Попробуйте удалить «android: taskAffinity =». MyNewActivity «' 'из MyNewActivity' –