2016-04-25 7 views
1

Ich habe eine Aktivität mit dem Namen A. Ich möchte zwei Aktivitätsalias namens B und C hinzufügen. Ist es möglich zu wissen, ob A im Code als B oder C bezeichnet wird? Ich möchte ein anderes Verhalten anzuwenden, wenn es als B oder C genanntAktivitätsalias in Zielaktivität prüfen

+0

Meinen Sie, wenn Sie Aktivität starten, wollen Sie wissen, wie es heißt? – Shahzeb

+0

Ja, ich würde gerne wissen, ob A "von" B oder C heißt – greywolf82

Antwort

2

Sie einige zusätzliche Informationen zu jedem <actvity-alias> im Manifest zur Verfügung stellen kann und die ActivityInfo mit Hilfe von PackageManager bewerten:

Um dies zu veranschaulichen, lassen Sie uns Angenommen, Sie möchten in Ihrem Ziel Activity zwei TextView s anzeigen und den Inhalt je nach verwendetem Alias ​​festlegen.

Im Manifest, setzen Sie die folgenden Elemente:

<activity 
    android:name=".HalloActivity" 
    android:label="@string/HalloDefault" > 
</activity> 
<activity-alias 
    android:name=".SalutActivity" 
    android:targetActivity=".HalloActivity" 
    android:label="@string/SalutAlias"> 
    <meta-data android:name="LOCALE" android:value="fr" /> 
</activity-alias> 
<activity-alias 
    android:name=".HelloActivity" 
    android:targetActivity=".HalloActivity" 
    android:label="@string/HelloAlias"> 
    <meta-data android:name="LOCALE" android:value="en" /> 
</activity-alias> 

einen Aliasnamen zu verwenden, die Activity wie folgt beginnen:

Intent intent = new Intent(); 
String pName = getPackageName(); 
ComponentName componentName = new ComponentName(pName, pName + ".HelloActivity"); 
intent.setComponent(componentName); 
startActivity(intent); 

Dann dann onCreate() Methode von HalloActivity, erhalten die android:label und die <meta-data> wie folgt:

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_hallo); 

    String text; 
    String label = "?"; 
    String locale = "de"; 
    int color; 

    Intent intent = getIntent(); 
    PackageManager pm = getPackageManager(); 
    try 
    { 
     ActivityInfo ai = pm.getActivityInfo(intent.getComponent(), PackageManager.GET_META_DATA); 

     label = getString(ai.labelRes); 

     Bundle b = ai.metaData; 

     if (b != null) 
     { 
      locale = b.getString("LOCALE"); 
      if (locale == null) 
      { 
       locale = "en"; 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     Log.e(TAG, ex.getMessage()); 
    } 

    switch(locale) 
    { 
     case "en": 
      text = "hello world :)"; 
      color = Color.BLUE; 
      break; 
     case "fr": 
      text = "salut tout le monde :D"; 
      color = Color.RED; 
      break; 
     default: 
      text = "hallo zusammen ;)"; 
      color = Color.GREEN; 
    } 


    TextView tvHello = (TextView) findViewById(R.id.tvHello); 
    tvHello.setText(text); 
    tvHello.setTextColor(color); 

    TextView tvLabel = (TextView) findViewById(R.id.tvLabel); 
    tvLabel.setText(label); 
} 

Wichtig, wenn sie mit <activity-alias> (zitiert aus documentation) arbeiten:

Mit Ausnahme von targetActivity, Attribute sind eine Untergruppe der Aktivität Attribute. Bei Attributen in der Teilmenge wird keiner der für das Ziel festgelegten Werte in den Alias ​​übernommen. Für Attribute, die nicht in der Teilmenge enthalten sind, gelten die für die Zielaktivität festgelegten Werte auch für den Alias.

Erfahren Sie mehr über <meta-data> in der documentation.