我想Activity
在的URI中获取要发送的当前名称HttpRequest
。有没有一种方法可以不专门参考Activity
?
我知道我可以做,myActivity.class.toString()
但是这只是对“ myActivity”进行硬编码的一种效率较低的方法,因为我正在静态引用my Activity
。是否有使用“ this”之类的东西(btw在这里实际上不起作用,因为它返回的信息多于所需信息)的更通用方法。
Answers:
使用this.getClass().getSimpleName()
来获取活动的名称。
从注释中,如果您处于某个OnClickListener
(或其他内部类)的上下文中,请手动指定该类:
MainActivity.class.getSimpleName()
MainActivity::class.java.name
在Kotlin中使用。
对于可能不想使用反射的纯粹主义者,一种替代方法是使用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()
)相同的工作。但是我想这可能对想要更多有关活动的信息而不仅仅是类名的人有用。
第一:打开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"
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"
}
this.getClass().getSimpleName()
吗?