这可能是由于未授权应用时使用UsageStatsManager导致的。您需要确保在manifest文件中授予应用程序获取UsageStats信息的权限,并且用户已经在设置中启用了这些权限。
此外,还有一个问题可能会导致此问题:如果仅在getTotalTimeInForeground()返回0时使用同一个包名重新请求,则可能会返回缓存的已知结果。为解决这个问题,可以使用flushPendingStats()方法刷新缓存。这里是示例代码:
//获取usageStatsManager
UsageStatsManager usageStatsManager = (UsageStatsManager) getSystemService(Context.USAGE_STATS_SERVICE);
//获取当前时间
long endTime = System.currentTimeMillis();
//获取一小时前的时间
long startTime = endTime - 3600000;
//获取所有使用时间
List usageStatsList = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, startTime, endTime);
//刷新缓存
usageStatsManager.flushPendingStats();