2016-11-24 3 views
1

Scénario - L'application ne fonctionne pas en arrière-plan. J'ai un récepteur implémenté pour ACTION_USER_PRESENT. Dans ce récepteur je commence une activité dont les paramètres manifeste sont:L'activité n'apparaît pas dans les recents android

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

Ceci est parce qu'il ya bannière dans pour que je crédite des points à l'utilisateur et je ne veux pas que l'utilisateur soit en mesure de lancer encore et encore pour la même bannière. De cette activité, je lance une autre activité sur un bouton. Ce nouveau MyNewActivity est lancé d'activité avec ceci:

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(); 

Maintenant, ma nouvelle activité devrait apparaître dans les recents si je appuyez longuement sur le bouton d'accueil ou sur le bouton recents.

Mais le problème est que, lorsque j'appuie sur la page d'accueil, MyNewActivity n'est pas affiché dans les récents.

Le MyNewActivity est défini dans le manifeste comme ceci:

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

ce que je fais mal et pourquoi pas MyNewActivity apparaît dans les recents.

Répondre

0

Si la tâche initiée par cette activité doit être exclue ou non de la liste des applications récemment utilisées, l'écran de synthèse. Que est, lorsque cette activité est l'activité racine d'une nouvelle tâche, cet attribut détermine si la tâche ne doit pas apparaître dans la liste des applications récentes . Définissez "true" si la tâche doit être exclue de la liste; définir "false" s'il doit être inclus. La valeur par défaut est "false".

De ce android:excludeFromRecents supprime toutes les activités dans la tâche en cours. Dans android toutes les activités dans l'application ont la même affinité et appartient à la même tâche sauf si vous spécifiez. Dans votre cas comme nouvelle activité commence dans la même tâche que votre activité précédente et android System supprime une nouvelle activité ainsi de la liste récente. Donc, vous devez spécifier android:taskAffinity dans votre manifeste pour chaque activité dans le manifeste et cela corrigera votre problème.

Pour plus de détails, veuillez vous référer au android documentation.

Fix: Utilisez android: 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

Si je donne l'affinité des tâches à la fois d'entre eux alors le MyNewActivity est lancé et montré dans recents mais si mon application était alors en arrière-plan avec l'activité principale alors il y a deux cas de mon application est indiquée dans les recents – beginner

+0

Donnez la même valeur de taskaffinity à toutes les activités et pour MyActivityB donnez une valeur différente – Swapnil

+0

Si je n'assigne pas à une autre activité et seulement à MyActivityB alors cela signifie que d'autres ont la même affinité (par défaut). – beginner

1

supprimer android:excludeFromRecents="true" de votre menifest. car il supprimera votre application des récents.

+0

Seulement enlever cela n'aide pas. – beginner

+0

êtes-vous confrontés au même problème après avoir enlevé cette ligne –

+0

Réponse partielle, il est mais pas complète – beginner

3

Comme par document android:excludeFromRecents

Tâche initiée par cette activité devraient être exclus de la liste des applications récemment utilisées, l'écran d'aperçu. En d'autres termes, lorsque cette activité est l'activité racine d'une nouvelle tâche, cet attribut détermine si la tâche ne doit pas apparaître dans la liste des applications récentes.

Par défaut, toutes les activités d'une application ont la même affinité. Les activités avec la même affinité appartiennent conceptuellement à la même tâche. Par conséquent, dans ce cas, MyActivityB et MyNewActivity appartiennent à la même tâche.android:excludeFromRecents garantit que la tâche ne figure pas dans les applications récentes.

C'est la raison pour laquelle, lorsque android:excludeFromRecents est à true pour MyActivityB, MyNewActivity disappers de l'histoire.

Solution:

Utilisez android:taskAffinity pour spécifier des tâches différentes pour les deux activités. Utilisez android:excludeFromRecents pour MyActivityB si cette tâche ne doit pas être affichée dans l'historique.

<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

Si je donne une affinité de tâche à tous les deux, puis MyNewActivity est lancé et montré dans les derniers mais si mon application était alors en arrière-plan avec l'activité principale alors – beginner

+0

donne la même valeur taskaffinity à toutes les activités (". MainActivity") et pour MyActivityB donne une valeur différente (". MyActivityB") – Swapnil

+1

Essayez de supprimer 'android: taskAffinity =". MyNewActivity "' 'de MyNewActivity' –