在Android开发中,有时我们需要获取当前正在显示的Activity的类名。下面我将详细介绍两种常用的方法来实现这个目标。
方法一:使用ActivityLifecycleCallbacks
Android提供了ActivityLifecycleCallbacks接口,通过该接口我们可以监听Activity的生命周期,从而获取当前正在显示的Activity的类名。
首先,在你的Application类中实现ActivityLifecycleCallbacks接口,并注册它:
public class MyApplication extends Application implements ActivityLifecycleCallbacks {
private String currentActivityName;
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(this);
}
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
setCurrentActivityName(activity.getClass().getSimpleName());
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
setCurrentActivityName(activity.getClass().getSimpleName());
}
// 实现其他接口方法
public synchronized void setCurrentActivityName(String name) {
currentActivityName = name;
}
public synchronized String getCurrentActivityName() {
return currentActivityName;
}
}
然后,在AndroidManifest.xml文件中将自定义的Application类指定为默认的Application类:
<application
android:name=".MyApplication"
<!-- 其他配置 -->
>
<!-- 活动声明 -->
<!-- 其他配置 -->
</application>
最后,你可以在任何地方获取当前正在显示的Activity的类名:
MyApplication myApplication = (MyApplication) getApplicationContext();
String currentActivityName = myApplication.getCurrentActivityName();
// 获取到的类名为字符串,可以根据需要进行处理
方法二:通过反射获取ActivityManager中的topActivity
另一种方法是通过反射获取ActivityManager中的topActivity,从而获取当前正在显示的Activity的类名。
public static String getCurrentActivityName(Context context) {
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
try {
Field field = am.getClass().getDeclaredField("mFocusedActivity");
field.setAccessible(true);
ComponentName componentName = (ComponentName) field.get(am);
return componentName.getClassName();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
你可以在任何地方调用该方法获取当前正在显示的Activity的类名:
String currentActivityName = getCurrentActivityName(getApplicationContext());
// 获取到的类名为字符串,可以根据需要进行处理
以上就是获得当前正在显示的Activity类名的两种常用方法的详细攻略。通过ActivityLifecycleCallbacks接口或反射方式,你可以灵活地获取到所需的信息。
来源: https://pythonjishu.com/klyperwgzvjdbkp/