android 获取栈顶app 包名。

        private static final long END_TIME = System.currentTimeMillis();
        private static final long TIME_INTERVAL = 7 * 24 * 60 * 60 * 1000L;
        private static final long START_TIME = END_TIME - TIME_INTERVAL;

        /**
         * 获取栈顶的应用包名
         */
        public static String getForegroundActivityName(Context context) {
            String currentClassName = "";
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
                ActivityManager manager = (ActivityManager) context.getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
                currentClassName = manager.getRunningTasks(1).get(0).topActivity.getPackageName();
            } else {
                UsageStats initStat = getForegroundUsageStats(context, START_TIME, END_TIME);
                if (initStat != null) {
                    currentClassName = initStat.getPackageName();
                }
            }
            return currentClassName;
        }

        /**
         * 判断当前应用是否在前台
         */
        public static boolean isForegroundApp(Context context) {
            return TextUtils.equals(getForegroundActivityName(context), context.getPackageName());
        }

        /**
         * 获取时间段内,
         */
        public static long getTotleForegroundTime(Context context) {
            UsageStats usageStats = getCurrentUsageStats(context, START_TIME, END_TIME);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                return usageStats != null ? usageStats.getTotalTimeInForeground() : 0;
            }
            return 0;
        }

        /**
         * 获取记录前台应用的UsageStats对象
         */
        private static UsageStats getForegroundUsageStats(Context context, long startTime, long endTime) {
            UsageStats usageStatsResult = null;
            if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                List<UsageStats> usageStatses = getUsageStatsList(context, startTime, endTime);
                if (usageStatses == null || usageStatses.isEmpty()) return null;
                for (UsageStats usageStats : usageStatses) {
                    if (usageStatsResult == null || usageStatsResult.getLastTimeUsed() < usageStats.getLastTimeUsed()) {
                        usageStatsResult = usageStats;
                    }
                }
            }
            return usageStatsResult;
        }

        /**
         * 获取记录当前应用的UsageStats对象
         */
        public static UsageStats getCurrentUsageStats(Context context, long startTime, long endTime) {
            if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                List<UsageStats> usageStatses = getUsageStatsList(context, startTime, endTime);
                if (usageStatses == null || usageStatses.isEmpty()) return null;
                for (UsageStats usageStats : usageStatses) {
                    if (TextUtils.equals(usageStats.getPackageName(), context.getPackageName())) {
                        return usageStats;
                    }
                }
            }
            return null;
        }

        /**
         * 通过UsageStatsManager获取List<UsageStats>集合
         */
        public static List<UsageStats> getUsageStatsList(Context context, long startTime, long endTime) {
            if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                UsageStatsManager manager = (UsageStatsManager) context.getApplicationContext().getSystemService(Context.USAGE_STATS_SERVICE);
                //UsageStatsManager.INTERVAL_WEEKLY,UsageStatsManager的参数定义了5个,具体查阅源码
                List<UsageStats> usageStatses = manager.queryUsageStats(UsageStatsManager.INTERVAL_BEST, startTime, endTime);
                if (usageStatses == null || usageStatses.size() == 0) {// 没有权限,获取不到数据
                    Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    context.getApplicationContext().startActivity(intent);
                    return null;
                }
                return usageStatses;
            }
            return null;
        }

<uses-permission
    android:name="android.permission.PACKAGE_USAGE_STATS"
    tools:ignore="ProtectedPermissions" />
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值