2010-07-17 4 views
38

Ich habe eine Anwendung mit zwei Aktivitäten und ich möchte in der Lage sein, zwei Symbole im Launcher erscheinen zu lassen, die jeweils die entsprechende Aktivität innerhalb der App starten.Wie bekomme ich mehrere Symbole, um verschiedene Aktivitäten in einer Anwendung zu starten?

Insbesondere möchte ich ein Symbol, um meine Haupt-App zu starten, und ein anderes Symbol, um meine Einstellungen zu starten. Ist das möglich? Hier

ist, was ich versucht habe, so weit:

<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> 

Dies schafft zwei Launcher Icons, aber sie beide meine Haupt-App anstelle des zweiten Symbol betreibe meine Einstellungen App ausgeführt wird. Ich habe versucht, nur die Launcher-Kategorie zu haben, aber dann bekomme ich kein Icon, also sieht es so aus, als ob ich auch die Hauptaktion brauche.

Ist dies der richtige Ansatz oder sollte ich stattdessen zwei Anwendungen im Manifest deklarieren?

Antwort

53

Sie müssen Ihre Einstellungsaktivität in einer anderen Aufgabe starten. Sie können dies tun, indem Sie seine Aufgabenaffinität angeben. Dies geschieht mit dem Attribut android:taskAffinity. Standardmäßig teilen sich alle Aktivitäten die gleiche Aufgabenaffinität wie das im Manifest angegebene Hauptpaket. In Ihrer Einstellungsaktivität können Sie android:taskAffinity="your.own.package.SettingsTask" angeben, damit die Einstellungsaktivität in einer eigenen Aufgabe gestartet wird.

Extra documentation.

+0

Große Antwort, das funktioniert perfekt. Vielen Dank! – afonseca

+0

Ich sehe nicht, warum dies eine andere Aufgabe erfordern würde ?? Es funktioniert gut innerhalb einer einzelnen Aufgabe und getrennte Aufgaben können andere Probleme verursachen. – sstn

+0

Hat nicht an mir gearbeitet. Scheint, dass 'taskAffinity' nicht funktioniert, ohne diese 'Activity' mit dem Flag' Intent.FLAG_ACTIVITY_NEW_TASK' zu starten. –

7

Sie in der richtigen Richtung auf jeden Fall gehen. Das ist, was ich habe (verkürztes, weil ich alle meine Aktivitäten in der Liste haben, während ich für den schnellen Zugriff bin devving):

<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> 

denke ich, was passieren kann es zu Störungen von Ihrem Action-Elemente, die die angeben Name deiner Klasse Ich bin mir ziemlich sicher, dass Aktionen und Kategorien sich auf Konstanten beziehen müssen. Ich weiß nicht, wie das dazu führen würde, was du siehst, aber du könntest versuchen, sie zu entfernen. Ansonsten hast du ziemlich viel, was ich habe.