87

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

naXa stands with Ukraine
  • 30,969
  • 16
  • 175
  • 237
evanmcdonnal
  • 42,528
  • 15
  • 96
  • 110

5 Answers5

206

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

Kevin Coppock
  • 131,356
  • 43
  • 258
  • 273
  • 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. – evanmcdonnal May 17 '12 at 00:04
  • 7
    To do this within an onClickListener, you would do "MyActivityName.this.getClass().getSimpleName()" –  Oct 04 '12 at 19:48
  • 3
    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. – zundi Nov 22 '14 at 15:21
  • Thank you. I was looking it. – shariful islam Jul 19 '18 at 16:02
  • 1
    And you can use `MainActivity::class.java.name` in kotlin. – NullByte08 Apr 10 '20 at 12:42
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.

darrenp
  • 4,075
  • 2
  • 25
  • 22
5
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);
Al Foиce ѫ
  • 4,015
  • 11
  • 37
  • 46
RJ CR
  • 61
  • 2
  • 2
3

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"
Mahmoud Ayman
  • 1,109
  • 1
  • 15
  • 24
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"
}
Pierre
  • 7,417
  • 4
  • 57
  • 71