Android5.0以上获取topActivity的包名方法与以下的整合

本文介绍了一种在Android系统中获取当前处于前台的应用程序包名的方法。此方法适用于Android 5.0及以上版本,通过分析运行进程信息来确定哪个应用处于最顶层。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 /**
     *  加入5.0获取当前 topactivity的包名(只能判断应用不再前台) modified by yj.zhang on 2016/10/10
     * @param context
     * @return
     */
    public static String getTopPackgeName(Context context)
    {
        String packgeName = " ";
        if (Build.VERSION.SDK_INT >= 21)
        {
            LOG.print("--------------------->getTopClassName-- 21--->");
            final int PROCESS_STATE_TOP = 2;
            ActivityManager.RunningAppProcessInfo currentInfo = null;
            Field field = null;
            try
            {
                field = ActivityManager.RunningAppProcessInfo.class.getDeclaredField("processState");
            }
            catch (Exception ignored)
            {
                ignored.printStackTrace();
            }
            ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
            List<ActivityManager.RunningAppProcessInfo> appList = am.getRunningAppProcesses();
            
           
            for (ActivityManager.RunningAppProcessInfo app : appList)
            {
               
                if (app.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND && app.importanceReasonCode == ActivityManager.RunningAppProcessInfo.REASON_UNKNOWN)
                {
                    Integer state = null;
                    try
                    {
                        state = field.getInt(app);
                    }
                    catch (Exception e)
                    {
                        e.printStackTrace();
                    }
                   
                    if (state != null && state == PROCESS_STATE_TOP)
                    {
                        currentInfo = app;
                        packgeName = currentInfo.processName;
                        break;
                    }
                }
            }
            
        }else{
            ActivityManager mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
            if( mActivityManager.getRunningTasks(1).size() > 0 )
            {
                ComponentName cn = mActivityManager.getRunningTasks(1).get(0).topActivity;
                packgeName = cn.getPackageName();
            }  
        }
        LOG.print("packgeName=" + packgeName);
        return packgeName;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值