动态获取活动名称 - android

eva*_*nal 69 android introspection android-activity

我想Activity在一个URI中获取要发送的当前名称HttpRequest.有没有办法做到这一点,而没有专门指的是Activity

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

kco*_*ock 172

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

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

MainActivity.class.getSimpleName()

  • 要在onClickListener中执行此操作,您可以执行"MyActivityName.this.getClass().getSimpleName()" (6认同)
  • 您应该注意,如果您要使用ProGuard,您的类名将被混淆,并且混淆的名称将是您在后端收到的名称. (2认同)
  • 您可以在 kotlin 中使用 `MainActivity::class.java.name` 。 (2认同)

dar*_*enp 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();
}
Run Code Online (Sandbox Code Playgroud)

然而,这似乎只是做了很多工作getClass().getName()(而不是甚至getSimpleName()).但我想这对于想要了解有关活动的更多信息而不仅仅是类名的人来说可能是有用的.


小智 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);
Run Code Online (Sandbox Code Playgroud)


Mah*_*man 5

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

你会发现你的包名称即"com.company.projectname"

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

MainActivity.class.getCanonicalName() >output> "com.company.projectname.MainActivity"
Run Code Online (Sandbox Code Playgroud)

或者

MainActivity.class.getSimpleName() >output> "MainActivity"
Run Code Online (Sandbox Code Playgroud)

或者

MainActivity.class.getName() >output> "com.company.projectname.MainActivity"
Run Code Online (Sandbox Code Playgroud)