Name des ActivityAlias ​​aus TargetActivity extrahieren / unterscheiden

8

Ich habe mehrere ActivityAliases , die alle ein einziges TargetActivity starten. Innerhalb meines TargetActivity versuche ich den Alias ​​ zu unterscheiden, der gestartet wurde die TargetActivity .

Die Aliase sind in Manifest als Launchables (Intent-Filter) definiert, was als angezeigt wird Verknüpfungen auf dem Homescreen. Der Benutzer wird auf die Verknüpfung und Android klicken startet die Aktivität, die ich im Tag " android:targetActivity=.. " definiert habe.

Dafür extrahiere ich momentan componentName von Intent , was ist an meine TargetActivity übergeben und die className() verwenden.

Wie:

%Vor%

Dies funktioniert für viele Geräte. Aber momentan sehe ich einige Fehler auf das OnePlus . Bei diesem Gerät gibt meine Methode nur den Klassennamen von zurück meine TargetActivity und daher kann ich die Aktion nicht liefern, basierend auf der Alias, den der Benutzer gestartet hat.

Gibt es andere, zuverlässige Methoden, um ActivityAlias zu erhalten, die verwendet wurden? starte TargetActivity ? Es muss nicht der Name selbst sein, so lange wie ich sie unterscheiden kann. Ich möchte keine dedizierten TargetActivities für jeden Alias ​​erstellen!

Danke!

Ps .: Ich habe einen anderen Weg gesehen, der den PackageManager zum Abrufen des activityInfo und den Activity.name verwenden. Aber das bezweifle ich etwas anderes als meine erste Annäherung zurückgeben.

%Vor%

Ich habe auch versucht, Metadaten:

Bearbeiten:

Leider funktioniert diese Methode nicht bei allen Geräten. Wenn der analysierte alias-className aus der activity.component-Komponente den Wert zurückgibt target-activity , dann schlägt auch der Meta-Daten-Ansatz fehl.

Ich suchte weiter nach einer Antwort und fand einen guten Workaround dafür Unterscheide zwischen meinen Aliasen innerhalb von TargetActivity.

Sie können Metadaten in Ihrem ActivityAlias-Tag wie folgt bereitstellen:

%Vor%

Der wichtige Teil hier ist:

%Vor%

Welches ist% <activity-alias> hier </activity-alias> -Tag.

Um die Metadaten zu extrahieren, können Sie eine ActivityInfo vom PackageManager erhalten mit der TargetActivity:

%Vor%

Und entpacken Sie die Metadaten über:

%Vor%

Bearbeiten:

Wenn Sie die Activity -Klasse mit dem Debugger untersuchen, enthält sie ein mActivityInfo -Feld, das sich von ActivityInfo unterscheidet, das von getPackageManager().getActivityInfo() zurückgegeben wurde, sodass Sie es mithilfe der Reflektion extrahieren und seinen Namen überprüfen können.

Hinweis: Es scheint, dass die von ActivityInfo zurückgegebene getPackageManager().getActivityInfo() eine flache Kopie von mActivityInfo von Activity ist. Vielleicht löst diese Methode das Problem nicht:

%Vor%     
JacksOnF1re 02.03.2016, 11:23
quelle

1 Antwort

0

1. Meta-Daten

Leider funktioniert diese Methode nicht bei allen Geräten. Wenn der analysierte alias-className aus der activity.component-Komponente den Wert zurückgibt target-activity , dann schlägt auch der Meta-Daten-Ansatz fehl.

Ich suchte weiter nach einer Antwort und fand einen guten Workaround dafür Unterscheide zwischen meinen Aliasen innerhalb der TargetActivity.

Sie können Metadaten in Ihrem ActivityAlias-Tag wie folgt bereitstellen:

%Vor%

Der wichtige Teil hier ist:

%Vor%

Welches ist% <activity-alias> hier </activity-alias> -Tag.

Um die Metadaten zu extrahieren, können Sie eine ActivityInfo vom PackageManager erhalten mit der TargetActivity:

%Vor%

Und entpacken Sie die Metadaten über:

%Vor%

2. mActivityInfo

Wenn Sie die Activity -Klasse mit dem Debugger untersuchen, enthält sie ein mActivityInfo -Feld, das sich von ActivityInfo unterscheidet, das von getPackageManager().getActivityInfo() zurückgegeben wurde, sodass Sie es mithilfe der Reflektion extrahieren und seinen Namen überprüfen können.

Hinweis: Es scheint, dass die von ActivityInfo zurückgegebene getPackageManager().getActivityInfo() eine flache Kopie von mActivityInfo von Activity ist. Vielleicht löst diese Methode das Problem nicht:

%Vor%     
JacksOnF1re 02.03.2016, 17:07
quelle