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:
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:
Tags und Links android android-activity android-manifest android-intent android-activity-alias