web-dev-qa-db-fra.com

Comment obtenir plusieurs icônes pour lancer différentes activités dans une seule application?

J'ai une application avec deux activités et j'aimerais pouvoir faire apparaître deux icônes dans le lanceur, chacune lançant l'activité respective dans l'application.

Plus précisément, je veux qu'une icône lance mon application principale et une autre icône pour lancer mon activité de paramètres. Est-ce possible?

Voici ce que j'ai essayé jusqu'à présent:

    <activity Android:label="MyApp" Android:name=".MyApp">
        <intent-filter>
            <action Android:name=".MyApp"/>
            <action Android:name="Android.intent.action.MAIN"/>
            <category Android:name="Android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>


    <activity Android:label="Settings" Android:name=".Settings">
        <intent-filter>
            <action Android:name=".Settings"/>
            <action Android:name="Android.intent.action.MAIN"/>
            <category Android:name="Android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>

Cela crée deux icônes de lancement, mais elles exécutent toutes les deux mon application principale au lieu de la deuxième icône exécutant mon application de paramètres. J'ai juste essayé d'avoir la catégorie lanceur, mais je n'ai pas d'icône, il semble donc que j'ai également besoin de l'action principale.

Est-ce la bonne approche ou dois-je plutôt déclarer deux applications dans le manifeste?

47
afonseca

Ce que vous devez faire, c'est lancer l'activité de vos paramètres dans une autre tâche. Vous pouvez le faire en spécifiant son affinité de tâche. Cela se fait avec l'attribut Android:taskAffinity. Par défaut, toutes les activités partagent la même affinité de tâche que celle par défaut du package principal spécifié dans le manifeste. Sur votre activité de paramètres, vous pouvez spécifier Android:taskAffinity="your.own.package.SettingsTask" pour lancer l'activité des paramètres dans sa propre tâche.

Documentation supplémentaire.

60
Rich Schuler

Vous allez définitivement dans la bonne direction. Voici ce que j'ai (tronqué, car j'ai toutes mes activités dans la liste pendant que je devve pour un accès rapide):

<activity Android:name=".DeckDrill"
          Android:label="DeckDrill">
    <intent-filter>
        <action Android:name="Android.intent.action.MAIN" />
        <category Android:name="Android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<activity Android:name=".DeckList"
          Android:label="DeckList">
    <intent-filter>
        <action Android:name="Android.intent.action.MAIN" />
        <category Android:name="Android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

Je pense que ce qui peut arriver, c'est l'interférence de vos éléments d'action qui spécifient le nom de votre classe. Je suis presque sûr que les actions et les catégories doivent faire référence à des constantes. Je ne sais pas comment cela se traduirait par ce que vous voyez, mais vous pouvez essayer de les supprimer. A part ça, vous avez à peu près ce que j'ai.

8
treed