动态获取活动名称 - android

时间:2012-05-16 23:36:53

标签: android android-activity introspection

我想在Activity的URI中获取要发送的当前HttpRequest的名称。有没有办法在不专门指Activity

的情况下执行此操作

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

5 个答案:

答案 0 :(得分:166)

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

从评论中,如果您在OnClickListener(或其他内部类)的上下文中,请手动指定类:

MainActivity.class.getSimpleName()

答案 1 :(得分: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())相同。但我想这对于想要了解有关活动的更多信息而不仅仅是类名的人来说可能是有用的。

答案 2 :(得分: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 :(得分:1)

首先:打开您的manifest.xml文件

您将找到您的软件包名称,即"com.company.projectname"

然后:假设您的活动名称为MainActivity

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

OR

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

OR

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

答案 4 :(得分: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"
}