首页 > 解决方案 > 如何避免在 Android 中由 UsageStatsManager 读取通知?

问题描述

我目前正在开发 AppLocker App,它检测用户使用 UsageStatsManager 打开的应用程序。我使用后台服务 BackgroundServices.java 进行检测。但是当我们通过向下滚动打开通知栏时,UsageStatsManager 会随机将任何通知视为正在运行并不必要地打开 LockScreen。

用于检测和返回当前使用应用程序 BackgroundServices.java 的主块

 private String printForegroundTask() {
        String currentApp = "NULL";
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            UsageStatsManager usm = (UsageStatsManager) this.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();
                }
            }
        } else {
            ActivityManager am = (ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE);
            List<ActivityManager.RunningAppProcessInfo> tasks = am.getRunningAppProcesses();
            currentApp = tasks.get(0).processName;
        }
        // Log.e("AppLockerService", "Current App in foreground is: " + currentApp)
            return currentApp;
    }

标签: android

解决方案


所以我发布这个来分享上述问题的答案。我在整个互联网上搜索了很多,发现了这个。

解决方案

我要感谢 Muthukrishnan Rajendran 回答这个问题。 他的个人资料链接

我希望正在搜索与该问题相关的答案的人可以通过链接轻松解决问题。谢谢你


推荐阅读