31 votes

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 être en mesure d'avoir deux icônes apparaissent dans l'écran de lancement, chaque lancement de l'activité respectifs au sein de l'application.

Plus précisément, je veux une icône pour lancer mon application principale, et une autre icône pour lancer les paramètres de mon activité. 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 du lanceur, mais ils ont tous deux faire fonctionner mon application principale au lieu de la deuxième icône de l'exécution de mon application paramètres. J'ai essayé un peu d'avoir le lanceur de catégorie, mais ensuite je n'ai pas d'icône de sorte qu'il semble que j'ai besoin de l'action principale ainsi.

Est-ce la bonne solution ou dois-je déclarer deux applications dans le manifeste à la place?

40voto

Qberticus Points 20157

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

Documentation supplémentaire.

5voto

treed Points 41

Vous êtes certainement va dans la bonne direction. C'est ce que j'ai (tronquée, parce que j'ai toutes mes activités dans la liste alors que je suis devving 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 se passer, c'est l'interférence de vos éléments d'action qui précise le nom de votre classe. Je suis assez sûr que les actions et les catégories besoin de se référer à des constantes. Je ne sais pas quelle serait la conséquence de ce que vous voyez, mais vous pouvez essayer de les enlever. Autre que cela, vous avez à peu près ce que j'ai.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X