Aktivitätsname dynamisch abrufen - android

73

Ich möchte den Namen des Stroms erhalten Activity, der in der URI eines gesendet werden soll HttpRequest. Gibt es eine Möglichkeit, dies zu tun, ohne sich speziell auf das zu beziehen Activity?

Ich weiß, dass ich das kann, myActivity.class.toString()aber dies ist nur eine weniger effiziente Methode, um "myActivity" fest zu codieren, da ich einen statischen Verweis auf meine mache Activity. Gibt es eine allgemeinere Möglichkeit, dies mit so etwas wie "dies" zu tun (was übrigens hier nicht wirklich funktioniert, weil es mehr Informationen zurückgibt als gewünscht).

evanmcdonnal
quelle
4
Ich weiß nicht, dass das funktioniert, aber können Sie es nicht einfach this.getClass().getSimpleName()stattdessen verwenden?
Kevin Coppock

Antworten:

185

Verwenden Sie this.getClass().getSimpleName()diese Option , um den Namen der Aktivität abzurufen.

Wenn Sie sich in den Kommentaren im Kontext einer OnClickListener(oder einer anderen inneren Klasse) befinden, geben Sie die Klasse manuell an:

MainActivity.class.getSimpleName()

Kevin Coppock
quelle
Das ist ein guter Vorschlag, aber nicht das, wonach ich suche. Es funktioniert in onCreate (), aber nicht in meinem onClickListener, in dem ich den Aktivitätsnamen erhalten möchte. Wenn ich nicht kann, ist keine Lösung besser als die Verwendung einer konstanten Zeichenfolge.
evanmcdonnal
7
Um dies in einem onClickListener zu tun, würden Sie "MyActivityName.this.getClass (). GetSimpleName ()"
3
Sie sollten beachten, dass bei Verwendung von ProGuard Ihr Klassenname verschleiert wird und der verschleierte Name im Backend angezeigt wird.
Zundi
Vielen Dank. Ich habe es gesucht.
Shariful Islam
Und Sie können MainActivity::class.java.namein Kotlin verwenden.
NullByte08
23

Für Puristen da draußen, die möglicherweise keine Reflexion verwenden möchten, besteht eine alternative Möglichkeit darin, PackageManagerFolgendes zu verwenden:

PackageManager packageManager = activity.getPackageManager();
try {
  ActivityInfo info = packageManager.getActivityInfo(activity.getComponentName(), 0);
  Log.e("app", "Activity name:" + info.name);
} catch (NameNotFoundException e) {
  e.printStackTrace();
}

Dies scheint jedoch eine Menge Arbeit zu sein, nur um das Gleiche zu tun wie getClass().getName()(und nicht einmal getSimpleName()). Aber ich denke, es kann für jemanden nützlich sein, der mehr Informationen über die Aktivität als nur den Klassennamen möchte.

Darrenp
quelle
4
ActivityManager am = (ActivityManager)context.getSystemService(ACTIVITY_SERVICE);
List< ActivityManager.RunningTaskInfo > taskInfo = am.getRunningTasks(1);
this.currentActivity = taskInfo.get(0).topActivity.getClassName();
Log.i( "CURRENT Activity ",  currentActivity);
RJ CR
quelle
3

Erstens: Öffnen Sie Ihre manifest.xmlDatei

Sie finden Ihren Paketnamen dh "com.company.projectname"

Dann: Nehmen wir an, Ihr Aktivitätsname lautetMainActivity

MainActivity.class.getCanonicalName() >output> "com.company.projectname.MainActivity"

ODER

MainActivity.class.getSimpleName() >output> "MainActivity"

ODER

MainActivity.class.getName() >output> "com.company.projectname.MainActivity"
Mahmoud Ayman
quelle
1

Für Xamarin

string GetActivityClassName(Activity activity) //Receiving LoginActivity
{
    //ComponentName
    activity.ComponentName; //Output: "md5101a0260d0a0e5d40a0a9009be09b0c2.LoginActivity"

    //LocalClassName
    activity.LocalClassName; //Output: "md5101a0260d0a0e5d40a0a9009be09b0c2.LoginActivity"

    //Java.Lang.Class.FromType.SimpleName
    Java.Lang.Class.FromType(activity.GetType()).SimpleName; //Output "LoginActivity"

    //Type.Name
    activity.GetType().Name; //Output "LoginActivity"
}
Pierre
quelle