android 如何获取当前 Activity 的类名和包名

server/2024/11/20 5:13:49/

 其一getClass().getSimpleName()

 public static String getTopActivity(Context context){
        ActivityManager am = (ActivityManager) context.getSystemService(context.ACTIVITY_SERVICE);
        ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
//        Log.d("Chunna.zheng", "pkg:"+cn.getPackageName());//包名
//        Log.d("Chunna.zheng", "cls:"+cn.getClassName());//包名加类名
        return cn.getClass().getSimpleName();
    }

 其二getClassName();

private String getCurrentActivityName() {
        ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
        ComponentName componentInfo = taskInfo.get(0).topActivity;
        return componentInfo.getClassName();
    }

 其三getPacakgeName() +是否在当前Task的栈顶

private String getTopActivityPacakgeName(){
        String currentApp = "CurrentNULL";
        UsageStatsManager usm = (UsageStatsManager) mContext.getSystemService(Context.USAGE_STATS_SERVICE);
        long time = System.currentTimeMillis();
        List<UsageStats> appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 1000, time);
        if (appList != null && appList.size() > 0) {
            SortedMap<Long, UsageStats> mySortedMap = new TreeMap<Long, UsageStats>();
            for (UsageStats usageStats : appList) {
                mySortedMap.put(usageStats.getLastTimeUsed(), usageStats);
            }

            if (mySortedMap != null && !mySortedMap.isEmpty()) {
                currentApp = mySortedMap.get(mySortedMap.lastKey()).getPackageName();
            }

        }
        Log.d("SideKey", "currentApp = "+currentApp);
        return currentApp;
    }

 其四getProcessNameByActivityName() 获取跳转的activity所在的进程Id 【不常用】

 public static String getProcessNameByActivityName(Context context, String activityName) {
        PackageInfo mPackageInfo = null;
        try {
            mPackageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_ACTIVITIES);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        if (mPackageInfo != null) {
            for (ActivityInfo activityInfo : mPackageInfo.activities) {
                if (activityInfo.name != null && activityInfo.name.endsWith(activityName)) {
//activityInfo.processName是activity所在的进程
//activityInfo.packageName是项目的包名,也就是com.**.application,并非进程名称
                    return activityInfo.processName;
                }
            }
        }
        return "";

}

其五:isRunning() 判断当前进程是否已启动  【不常用】

 

public static boolean isRunning(Context context, String packageName) {
        ActivityManager am = (ActivityManager) context.getSystemService(Activity.ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> infos = am.getRunningAppProcesses();
        if (infos == null) {
            return false;
        }
        for (ActivityManager.RunningAppProcessInfo rapi : infos) {
            if (rapi.processName.equals(packageName))
                return true;
        }
        return false;
    }

其六:isServiceRunning()   : 获取当前运行的service  【不常用】

 

public static boolean isServiceRunning(String serviceClassName){

  final ActivityManager activityManager = (ActivityManager)

           Application.getContext().getSystemService(Context.ACTIVITY_SERVICE);

       final List<RunningServiceInfo> services 

                     activityManager.getRunningServices(Integer.MAX_VALUE);

     for (RunningServiceInfo runningServiceInfo : services) {

             if (runningServiceInfo.service.getClassName().equals(serviceClassName)){

                    return true;

             }

       }

        return false;

 }

 更多方法获取了解:

分别得到当前类的类名和包名

String localClassName = getLocalClassName(); //String ClassName = getClassName();
String packageName = getPackageName();
String name = getClass().getName();

 String typename = getClass().getTypeName()
String simpleName = getClass().getSimpleName();
String canonicalName = getClass().getCanonicalName();

举例:
1.localClassName  = "MainActivity"
2.packageName  = "com.android.server"
3.name    = "com.android.server.MainActivity"

4.typename = "com.android.server.MainActivity"
5.simpleName  = "MainActivity"
6.canonicalName  =  "com.android.server.MainActivity"


http://www.ppmy.cn/server/143385.html

相关文章

前端搭建低代码平台,微前端如何选型?

目录 背景 一、微前端是什么&#xff1f; 二、三大特性 三、现有微前端解决方案 1、iframe 2、Web Components 3、ESM 4、EMP 5、Fronts 6、无界&#xff08;文档&#xff09; 7、qiankun 四、我们选择的方案 引入qiankun并使用&#xff08;src外层作为主应用&#xff09; 主应…

【设计模式-迪米特法则】

迪米特法则&#xff08;Law of Demeter&#xff0c;LoD&#xff09;&#xff0c;也称为最少知识原则&#xff08;Principle of Least Knowledge&#xff09;&#xff0c;是一种面向对象编程中的设计原则。它的核心思想是&#xff1a;一个对象应当尽可能少地了解其他对象&#x…

SpringBoot集成jpa使用步骤以及场景

应用场景 将环形独立为starter后涉及到创建表数据&#xff0c;想要实现每一个项目在使用该starter项目的时候就把表结构导入到自己的项目中&#xff0c;使用jpa实现 实现步骤 1.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <a…

React Native 全栈开发实战班 - 性能与调试之打包与发布

在完成 React Native 应用的开发与性能优化后&#xff0c;下一步就是将应用打包并发布到各大应用市场&#xff0c;如 Apple App Store 和 Google Play Store。本章节将详细介绍 React Native 应用的打包与发布流程&#xff0c;包括 Android 和 iOS 平台的打包步骤、签名配置、发…

【深度学习目标检测|YOLO算法6-27】YOLO家族进化史:从YOLOv1到YOLOv11的架构创新、性能优化与行业应用全解析...

【深度学习目标检测|YOLO算法6-2&7】YOLO家族进化史&#xff1a;从YOLOv1到YOLOv11的架构创新、性能优化与行业应用全解析… 【深度学习目标检测|YOLO算法6-2&7】YOLO家族进化史&#xff1a;从YOLOv1到YOLOv11的架构创新、性能优化与行业应用全解析… 文章目录 【深度…

CSS —— 子绝父相

相对定位&#xff1a;占位&#xff1b;不脱标 绝对定位&#xff1a;不占位&#xff1b;脱标 希望子元素相对于父元素定位&#xff0c;又不希望父元素脱标&#xff08;父元素占位&#xff09; 子级是 绝对定位&#xff0c;不会占有位置&#xff0c; 可以放到父盒子里面的任何一…

k8s入门学习

以下是一个Kubernetes (k8s) 学习详细笔记&#xff0c;旨在帮助您全面理解和掌握Kubernetes的基础概念、架构、操作方法以及最佳实践&#xff0c;从而在后端开发和运维中高效地使用Kubernetes进行容器编排和管理。 目录 引言Kubernetes基础 2.1 什么是Kubernetes&#xff1f;2…

远程管理不再难!树莓派5安装Raspberry Pi OS并实现使用VNC异地连接

前言&#xff1a;大家好&#xff01;今天我要教你们如何在树莓派5上安装Raspberry Pi OS&#xff0c;并配置SSH和VNC权限。通过这些步骤&#xff0c;你将能够在Windows电脑上使用VNC Viewer&#xff0c;结合Cpolar内网穿透工具&#xff0c;实现长期的公网远程访问管理本地树莓派…