下面的代码每秒跟踪今天应用程序的使用情况,以获得准确的使用时间。问题是它每秒记录相同的使用时间,即打开应用程序时的使用时间。在用户重新打开应用程序之前,使用时间不会改变。当我使用该应用程序时,使用时间应该会增加,但事实并非如此,我如何才能获得该应用程序的实时使用时间。
long currentTime = System.currentTimeMillis();
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
long startMillis = calendar.getTimeInMillis();
UsageStatsManager usageStatsManager = (UsageStatsManager) getSystemService(Context.USAGE_STATS_SERVICE);
List<UsageStats> usageStats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY,startMillis, currentTime);
Log.d("MainActivity", Arrays.toString(usageStats.toArray()));
Handler handler = new Handler(getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {
for(UsageStats stat : usageStats){
if(stat.getPackageName().equals(getPackageName())){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
Log.d("MainActivity", "Usage time: " + stat.getTotalTimeVisible());
}
}
}
handler.postDelayed(this, 1000);
}
});
这是使用应用程序时的日志(如果应用程序在后台运行,则不会更改):
2024-02-25 17:30:22.840 13942-13942 MainActivity com.prototype1 D Usage time: 1435719
2024-02-25 17:30:23.851 13942-13942 MainActivity com.prototype1 D Usage time: 1435719
2024-02-25 17:30:24.864 13942-13942 MainActivity com.prototype1 D Usage time: 1435719
2024-02-25 17:30:25.874 13942-13942 MainActivity com.prototype1 D Usage time: 1435719
2024-02-25 17:30:26.885 13942-13942 MainActivity com.prototype1 D Usage time: 1435719
2024-02-25 17:30:27.894 13942-13942 MainActivity com.prototype1 D Usage time: 1435719
2024-02-25 17:30:28.906 13942-13942 MainActivity com.prototype1 D Usage time: 1435719
2024-02-25 17:30:29.916 13942-13942 MainActivity com.prototype1 D Usage time: 1435719
即使您每秒轮询
getTotalTimeVisible
,您通过 queryUsageStats
和 beginTime
参数提供给 endTime
方法的时间间隔始终相同(并且指的是过去)。
因此,
getTotalTimeVisible
方法调用将始终返回相同的值。