90

I'd like to get the name of the current Activity to be sent along in the URI of an HttpRequest. Is there a way to do this without referring specifically to the Activity?

I know I can do myActivity.class.toString() but this is just a less efficient way of hard coding "myActivity" since I'm making a static reference to my Activity. Is there a more general way to do this using something like 'this' (which btw doesn't actually work here because it returns more information than what's desired).

1
  • 4
    I don't know that this works, but can't you just use this.getClass().getSimpleName() instead? Commented May 16, 2012 at 23:38

6 Answers 6

214

Use this.getClass().getSimpleName() to get the name of the Activity.

From the comments, if you're in the context of an OnClickListener (or other inner class), specify the class manually:

MainActivity.class.getSimpleName()

Sign up to request clarification or add additional context in comments.

4 Comments

That's a good suggestion but not what I'm looking for. It works within onCreate(), but not from within my onClickListener which is where I would like to get the Activity name. If I can't no solution is better than using a constant string.
To do this within an onClickListener, you would do "MyActivityName.this.getClass().getSimpleName()"
You should note that if you are going to use ProGuard, your class name will get obfuscated and the obfuscated name is what you'll receive on the backend.
And you can use MainActivity::class.java.name in kotlin.
23

For purists out there who may not want to use reflection, an alternative way is to use the PackageManager as follows:

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

However this seems like a lot of work just to do the same as getClass().getName() (and not even getSimpleName()). But I guess it may be useful for someone who wants more information about the activity than just the class name.

Comments

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

2 Comments

getRunningTasks is deprecated.
This Code crashed Android 12, Android 13 devices.
5

First: open your manifest.xml file

you will find your package name i.e. "com.company.projectname"

Then: lets say your activity name is MainActivity

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

OR

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

OR

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

Comments

1

For 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" } 

Comments

1

For anyone using Kotlin, try this:

this.javaClass.name 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.