动态获取活动名称-Android


74

我想Activity在的URI中获取要发送的当前名称HttpRequest。有没有一种方法可以不专门参考Activity

我知道我可以做,myActivity.class.toString()但是这只是对“ myActivity”进行硬编码的一种效率较低的方法,因为我正在静态引用my Activity。是否有使用“ this”之类的东西(btw在这里实际上不起作用,因为它返回的信息多于所需信息)的更通用方法。


4
我不知道这可行,但是您不能只使用它this.getClass().getSimpleName()吗?
凯文·科波克

Answers:


188

使用this.getClass().getSimpleName()来获取活动的名称。

从注释中,如果您处于某个OnClickListener(或其他内部类)的上下文中,请手动指定该类:

MainActivity.class.getSimpleName()


这是一个很好的建议,但不是我想要的。它可以在onCreate()中工作,但不能从我想获取活动名称的onClickListener中工作。如果无法解决,那么比使用常量字符串更好。
evanmcdonnal 2012年

7
为此,您需要在“ onClickListener”中执行“ MyActivityName.this.getClass()。getSimpleName()”

3
您应该注意,如果您要使用ProGuard,则将混淆您的类名,而混淆名是您将在后端收到的名称。
zundi 2014年

谢谢。我在看
伊斯兰教伊斯兰教'18

而且您可以MainActivity::class.java.name在Kotlin中使用。
NullByte08年

23

对于可能不想使用反射的纯粹主义者,一种替代方法是使用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())相同的工作。但是我想这可能对想要更多有关活动的信息而不仅仅是类名的人有用。


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

3

第一:打开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"

1

对于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"
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.