2010-07-17 5 views
38

Ho un'applicazione con due attività e mi piacerebbe poter avere due icone nel launcher, ognuna delle quali avvierà la rispettiva attività all'interno dell'app.Come ottengo più icone per avviare diverse attività in un'unica applicazione?

In particolare, voglio che un'icona avvii la mia app principale e un'altra icona per avviare l'attività delle mie impostazioni. È possibile?

Ecco quello che ho provato finora:

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

Questo crea due launcher icone, ma entrambi gestiscono la mia applicazione principale invece della seconda icona correre la mia impostazioni dell'app. Ho provato ad avere la categoria launcher ma poi non ho un'icona, quindi sembra che abbia bisogno anche dell'azione principale.

È questo l'approccio giusto o dovrei dichiarare invece due applicazioni in manifest?

risposta

53

Quello che devi fare è avviare l'attività delle impostazioni in un'altra attività. Puoi farlo specificando la sua affinità di compito. Questo viene fatto con l'attributo android:taskAffinity. Per impostazione predefinita, tutte le attività condividono la stessa affinità di attività predefinita per il pacchetto principale specificato nel manifest. Nell'attività delle impostazioni è possibile specificare android:taskAffinity="your.own.package.SettingsTask" per avviare l'attività delle impostazioni nella propria attività.

Extra documentation.

+0

Ottima risposta, funziona perfettamente. Grazie! – afonseca

+0

Non vedo perché questo dovrebbe richiedere un altro compito ?? Funziona bene in una singola attività e attività separate potrebbero creare altri problemi. – sstn

+0

Non ha funzionato su di me. Sembra che 'taskAffinity' non funzioni senza avviare 'Activity' con flag' Intent.FLAG_ACTIVITY_NEW_TASK' –

7

Stai sicuramente andando nella direzione giusta. Questo è quello che ho (troncato, perché ho tutte le mie attività nella lista mentre sto devving per l'accesso rapido):

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

Penso che quello che può accadere è l'interferenza da elementi di azione che specifica il nome della tua classe. Sono abbastanza sicuro che le azioni e le categorie devono fare riferimento alle costanti. Non so come ciò si tradurrebbe in ciò che stai vedendo, ma potresti provare a rimuoverli. Oltre a questo, hai praticamente quello che ho.

Problemi correlati