{"id":33,"date":"2012-10-02T17:19:00","date_gmt":"2012-10-02T16:19:00","guid":{"rendered":"http:\/\/cyol.fr\/blogwp\/?p=33"},"modified":"2013-07-22T16:20:06","modified_gmt":"2013-07-22T15:20:06","slug":"dev-android-fermer-toutes-les-activity-de-son-appli","status":"publish","type":"post","link":"https:\/\/cyol.fr\/blog\/post\/dev-android-fermer-toutes-les-activity-de-son-appli\/","title":{"rendered":"D\u00e9v Android : Fermer toutes les Activity de son appli"},"content":{"rendered":"<p><a href=\"https:\/\/cyol.fr\/blog\/wp-content\/uploads\/billets\/icones\/Android_Robot_100.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-124\" alt=\"Logo Android\" src=\"https:\/\/cyol.fr\/blog\/wp-content\/uploads\/billets\/icones\/Android_Robot_100.png\" width=\"85\" height=\"100\" \/><\/a>Lorsque j&rsquo;ai ajout\u00e9 \u00e0 SRDice la fonctionnalit\u00e9 pour g\u00e9rer les Tests \u00c9tendus de Shadowrun 4\u00e8me \u00e9dition, je me suis retrouv\u00e9 confront\u00e9 \u00e0 un probl\u00e8me. J&rsquo;avais cr\u00e9\u00e9 une seconde Activity pour cette fonctionnalit\u00e9, mais quand je demandais \u00e0 fermer l&rsquo;application depuis cette seconde Activity avec System.exit(0), je me retrouvais sur ma premi\u00e8re Actitity des Tests Simples. Ce qui, d&rsquo;une certaine fa\u00e7on, est normal, vu que les Activity se lancent les une apr\u00e8s les autres en \u00ab\u00a0s&#8217;empilant\u00a0\u00bb. En fermant celle du dessus, Android me propose l&rsquo;Activity disponible juste en dessous.<\/p>\n<p><!--more--><\/p>\n<p>J&rsquo;ai du chercher un moment une solution \u00e9l\u00e9gante avant de tomber sur un superbe tutoriel accompagn\u00e9 du code d&rsquo;une micro application exemple\u00a0: <a title=\" Igor Khrupin\u00a0: How to finish all activities in your Android application through simple call\" href=\"http:\/\/www.hrupin.com\/2011\/10\/how-to-finish-all-activities-in-your-android-application-through-simple-call\" hreflang=\"en\">http:\/\/www.hrupin.com\/2011\/10\/how-to-finish-all-activities-in-your-android-application-through-simple-call<\/a><br \/>\nAvec l&rsquo;autorisation de l&rsquo;auteur Igor Khrupin (thanks again) je vous le traduits\u00a0:<\/p>\n<blockquote><p>La probl\u00e9matique est de pouvoir fermer toutes les Activity de votre application Android par un simple appel.<br \/>\nIl y a plusieurs fa\u00e7ons de r\u00e9soudre ce probl\u00e8me. Je vais vous montrer l&rsquo;une d&rsquo;elles. Ci-dessous vous pouvez t\u00e9l\u00e9charger l&rsquo;exemple de projet. Ce projet contient 3 (trois) Activity et une Activity abstract. Toutes les Activity de ce projet \u00e9tendent cette abstract. C&rsquo;est elle qui \u00e9tend Activity de l&rsquo;API Android.<\/p><\/blockquote>\n<p>NDT\u00a0: Allez sur le <a title=\" Igor Khrupin\u00a0: How to finish all activities in your Android application through simple call\" href=\"http:\/\/www.hrupin.com\/2011\/10\/how-to-finish-all-activities-in-your-android-application-through-simple-call\" hreflang=\"en\">billet de Igor Khrupin<\/a> pour r\u00e9cup\u00e9rer les sources.<\/p>\n<blockquote><p>Voici la source de l&rsquo;Abstract\u00a0:<\/p><\/blockquote>\n<pre class=\"brush:java\">package com.hrupin;\r\nimport android.app.Activity;\r\nimport android.content.BroadcastReceiver;\r\nimport android.content.Context;\r\nimport android.content.Intent;\r\nimport android.content.IntentFilter;\r\n\r\npublic abstract class AppBaseActivity extends Activity {\r\n\tpublic static final String FINISH_ALL_ACTIVITIES_ACTIVITY_ACTION = \"com.hrupin.FINISH_ALL_ACTIVITIES_ACTIVITY_ACTION\";\r\n\tprivate BaseActivityReceiver baseActivityReceiver = new BaseActivityReceiver();\r\n\tpublic static final IntentFilter INTENT_FILTER = createIntentFilter();\r\n\r\n\tprivate static IntentFilter createIntentFilter() {\r\n\t\tIntentFilter filter = new IntentFilter();\r\n\t\tfilter.addAction(FINISH_ALL_ACTIVITIES_ACTIVITY_ACTION);\r\n\t\treturn filter;\r\n\t}\r\n\r\n\tprotected void registerBaseActivityReceiver() {\r\n\t\tregisterReceiver(baseActivityReceiver, INTENT_FILTER);\r\n\t}\r\n\tprotected void unRegisterBaseActivityReceiver() {\r\n\t\tunregisterReceiver(baseActivityReceiver);\r\n\t}\r\n\tpublic class BaseActivityReceiver extends BroadcastReceiver {\r\n\t\t@Override\r\n\t\tpublic void onReceive(Context context, Intent intent) {\r\n\t\t\tif (intent.getAction().equals(FINISH_ALL_ACTIVITIES_ACTIVITY_ACTION)) {\r\n\t\t\t\tfinish();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprotected void closeAllActivities() {\r\n\t\tsendBroadcast(new Intent(FINISH_ALL_ACTIVITIES_ACTIVITY_ACTION));\r\n\t}\r\n}<\/pre>\n<blockquote><p>Vous pouvez voir que cette class contient BrodcastReceiver \u2013&gt; <strong>BaseActivityReceiver<\/strong><br \/>\nCe broadcastReceiver appelle le <em>finish()<\/em> pour l&rsquo;Activity. Cette class contient aussi les m\u00e9thodes pour cr\u00e9er intentFilter, d\u00e9clarer et annuler le broadcastReceiver ainsi que la m\u00e9thode <em>closeAllActivities()<\/em> qui va fermer uniquement les Activity de VOTRE application.<br \/>\nLe code est assez simple. \ud83d\ude42<\/p><\/blockquote>\n<p>Je vous engage \u00e0 aller t\u00e9l\u00e9charger le code source sur le <a title=\" Igor Khrupin\u00a0: How to finish all activities in your Android application through simple call\" href=\"http:\/\/www.hrupin.com\/2011\/10\/how-to-finish-all-activities-in-your-android-application-through-simple-call\" hreflang=\"en\">billet de Igor Khrupin<\/a> et \u00e0 l&rsquo;\u00e9tudier. Il est vraiment tr\u00e8s simple et compr\u00e9hensible.<br \/>\nSi je devais r\u00e9sumer\u00a0: On cr\u00e9e une Activity qui est celle d\u00e9clar\u00e9e dans l&rsquo;AndroidManifest. Cette Activity est un Abstract et toutes les autres activity ne sont que ses filles. On a donc toujours qu&rsquo;une seule activity d&rsquo;active \u00e0 la fois. Et vu qu&rsquo;on ferme la m\u00e8re (et seule activity), affaire r\u00e9gl\u00e9e\u00a0!<br \/>\nDe plus, cette architecture est aussi tr\u00e8s pratique pour mutualiser entre toutes vos activity les m\u00e9thodes qui seraient communes (gestion du menu, fonctions g\u00e9n\u00e9riques, &#8230;)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lorsque j&rsquo;ai ajout\u00e9 \u00e0 SRDice la fonctionnalit\u00e9 pour g\u00e9rer les Tests \u00c9tendus de Shadowrun 4\u00e8me \u00e9dition, je me suis retrouv\u00e9 confront\u00e9 \u00e0 un probl\u00e8me. J&rsquo;avais cr\u00e9\u00e9 une seconde Activity pour cette fonctionnalit\u00e9, mais quand je demandais \u00e0 fermer l&rsquo;application depuis cette seconde Activity avec System.exit(0), je me retrouvais sur ma premi\u00e8re Actitity des Tests Simples. [&#8230;]<\/p>\n","protected":false},"author":1,"featured_media":124,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,4],"tags":[26,114,30,18,19,112,32,31],"class_list":["post-33","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-android","category-srdice","tag-activity","tag-android","tag-androidmanifest","tag-java","tag-shadowrun","tag-srdice","tag-tests-etendus","tag-tests-simples","odd"],"_links":{"self":[{"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/posts\/33","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/comments?post=33"}],"version-history":[{"count":8,"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/posts\/33\/revisions"}],"predecessor-version":[{"id":177,"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/posts\/33\/revisions\/177"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/media\/124"}],"wp:attachment":[{"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/media?parent=33"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/categories?post=33"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/tags?post=33"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}