Получить название активности динамически - андроид

Я хотел бы получить имя текущего Activity для отправки в URI HttpRequest. Есть ли способ сделать это, не обращаясь конкретно к Activity?

Я знаю, что могу сделать myActivity.class.toString(), но это всего лишь менее эффективный способ жесткого кодирования "myActivity", поскольку я статирую ссылку на мой Activity. Есть ли более общий способ сделать это, используя что-то вроде 'this' (какой btw на самом деле не работает здесь, потому что он возвращает больше информации, чем желаемый).

Ответ 1

Используйте this.getClass().getSimpleName(), чтобы получить имя Activity.

Из комментариев, если вы находитесь в контексте OnClickListener (или другого внутреннего класса), укажите класс вручную:

MainActivity.class.getSimpleName()

Ответ 2

Для пуристов, которые не хотят использовать отражение, альтернативным способом является использование PackageManager следующим образом:

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

Однако это похоже на большую работу, чтобы сделать то же самое, что и getClass().getName() (и даже не getSimpleName()). Но я думаю, это может быть полезно для тех, кто хочет получить больше информации о деятельности, чем просто имя класса.

Ответ 3

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

Ответ 4

Использовать простой метод

getLocalClassName().toString

это даст вам имя вашего класса