在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/