Динамическое получение имени действия - android

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

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


person evanmcdonnal    schedule 16.05.2012    source источник
comment
Я не знаю, работает ли это, но нельзя ли вместо этого просто использовать this.getClass().getSimpleName()?   -  person Kevin Coppock    schedule 17.05.2012


Ответы (4)


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

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

MainActivity.class.getSimpleName()

person Kevin Coppock    schedule 16.05.2012
comment
Это хорошее предложение, но не то, что я ищу. Он работает в onCreate(), но не в моем onClickListener, где я хотел бы получить имя действия. Если я не могу, нет решения лучше, чем использование постоянной строки. - person evanmcdonnal; 17.05.2012
comment
Чтобы сделать это в onClickListener, вы должны сделать MyActivityName.this.getClass().getSimpleName() - person ; 04.10.2012
comment
Вы должны отметить, что если вы собираетесь использовать ProGuard, имя вашего класса будет замаскировано, а замаскированное имя — это то, что вы получите на бэкэнде. - person zundi; 22.11.2014
comment
Спасибо. Я смотрел это. - person shariful islam; 19.07.2018
comment
И вы можете использовать MainActivity::class.java.name в котлине. - person NullByte08; 10.04.2020

Для пуристов, которые могут не захотеть использовать отражение, альтернативным способом является использование 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()). Но я думаю, это может быть полезно для тех, кто хочет получить больше информации об активности, чем просто имя класса.

person darrenp    schedule 10.09.2013

Во-первых: откройте файл manifest.xml

вы найдете имя своего пакета, т.е. "com.company.projectname"

Затем: предположим, название вашей активности – MainActivity.

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

ИЛИ

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

ИЛИ

MainActivity.class.getName() >output> "com.company.projectname.MainActivity"
person Mahmoud Ayman    schedule 25.06.2018

Для 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"
}
person Pierre    schedule 20.03.2019