2010-09-14 5 views
1

J'ai un widget qui, lorsqu'il est cliqué, ouvre une activité depuis la même application que le widget. Lorsque l'activité est fermée/rejetée via un bouton, l'utilisateur verra la fenêtre complète de l'application SI l'application était précédemment ouverte/en mémoire. Y a-t-il un moyen pour que l'activité se termine et retourne à l'écran d'accueil et non à une instance existante de l'application?Android - Comment lancer une activité à partir d'un widget et revenir à l'écran d'accueil

Intent i = new Intent(this,RateIt.class); 
i.putExtra("com.sporadicsoftware.NetQ.movie_id",aMovie.title_id); 
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET|Intent.FLAG_ACTIVITY_NO_HISTORY|Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      PendingIntent pendingIntent = PendingIntent.getActivity(context, 
        0, i, PendingIntent.FLAG_UPDATE_CURRENT); 
      updateViews.setOnClickPendingIntent(R.id.movie_one_title, pendingIntent); 

Répondre

4

Jetez un oeil à la ligne directrice "Notifications should let the user easily get back to the previous activity" interface utilisateur pour une situation similaire, ainsi que la section Activities and Tasks du sujet-cadre des Principes fondamentaux d'application. Selon vos besoins, vous pouvez utiliser l'indicateur d'intention FLAG_ACTIVITY_NEW_TASK en combinaison avec la définition d'une affinité individuelle pour l'activité que vous souhaitez ouvrir séparément. Vous pouvez définir l'attribut taskAffinity de l'élément <activity> dans votre manifeste sur la chaîne vide. Cela ne serait une bonne solution que si vous utilisez toujours cette activité séparément du reste de l'application.

De l'documentation:

android:taskAffinity

La tâche que l'activité a une affinité pour. Les activités avec la même affinité appartiennent conceptuellement à la même tâche (à la même "application" du point de vue de l'utilisateur). L'affinité d'une tâche est déterminée par l'affinité de son activité racine. L'affinité détermine deux choses: la tâche à laquelle l'activité est re-parentée (voir l'attribut allowTaskReparenting) et la tâche qui hébergera l'activité lorsqu'elle est lancée avec l'indicateur FLAG_ACTIVITY_NEW_TASK.

Par défaut, toutes les activités d'une application ont la même affinité. Vous pouvez définir cet attribut pour les regrouper différemment et même placer les activités définies dans différentes applications dans la même tâche. Pour spécifier que l'activité n'a pas d'affinité pour une tâche, définissez-la sur une chaîne vide.

Si cet attribut n'est pas défini, l'activité hérite du jeu d'affinités pour l'application (voir l'attribut taskAffinity de l'élément <application>). Le nom de l'affinité par défaut pour une application est le nom du package défini par l'élément <manifest>.

Questions connexes