当前位置: 首页 > article >正文

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

 其一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.kler.cn/a/400705.html

相关文章:

  • 01_MinIO部署(Windows单节点部署/Docker化部署)
  • 【模块一】kubernetes容器编排进阶实战资源对象之Configmap与Secret简介
  • hadoop3.x 新特性
  • MySQL的聚簇索引和二级索引
  • 微博短链接平台-项目测试用例设计(Xmind)
  • Macmini中普通鼠标与TrackPad联动问题解决
  • 论文阅读《Neural Map Prior for Autonomous Driving》
  • 【深度学习目标检测|YOLO算法6-27】YOLO家族进化史:从YOLOv1到YOLOv11的架构创新、性能优化与行业应用全解析...
  • 基于yolov8、yolov5的植物类别识别系统(含UI界面、训练好的模型、Python代码、数据集)
  • 2024 CCF中国开源大会“开源科学计算与系统建模openSCS”分论坛成功举办
  • 跨平台WPF框架Avalonia教程 八
  • 如何在项目中用elementui实现分页器功能
  • OceanBase 分区表详解
  • Vue监视属性变化watch
  • 25-Elasticsearch 数据建模实例
  • 模型的评估指标——IoU、混淆矩阵、Precision、Recall、P-R曲线、F1-score、mAP、AP、AUC-ROC
  • C++设计模式:抽象工厂模式(风格切换案例)
  • IDEA如何设置编码格式,字符编码,全局编码和项目编码格式
  • 静默绑定推广人方法修复
  • 微信小程序内嵌h5页面(uniapp写的),使用uni.openLocation无法打开页面问题
  • 计算机网络-理论部分(二):应用层
  • django从入门到精通(五)——表单与模型
  • LeetCode 1004.最大连续1的个数III
  • 工程车识别算法平台LiteAIServer算法定制工程车类型检测算法:建筑工地安全管理的得力助手
  • 设备树总结学习
  • Arcgis js 加载mvt服务