我试图在我的Android手机中获取每个活动的前景时间。
我执行的代码如下
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public List<UsageStats> getUsageStats() {
UsageStatsManager mUsageStatsManager = (UsageStatsManager) getActivity()
.getSystemService(Context.USAGE_STATS_SERVICE);
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
List<UsageStats> queryUsageStats = mUsageStatsManager
.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, cal.getTimeInMillis(),
System.currentTimeMillis());
return queryUsageStats;
}
这是印刷声明
for(UsageStats usageStats:getUsageStats()){
Log.i("Usage Stats",usageStats.toString()+"\t"+usageStats.getPackageName()+"\t"+usageStats.getTotalTimeInForeground());
}
我得到的结果如下。
com.whatsapp 2413684
com.google.android.googlequicksearchbox 2344707
com.google.android.youtube 1786804
com.google.android.googlequicksearchbox 1683449
com.google.android.googlequicksearchbox 1577473
com.whatsapp 1040572
因为你可以whatsapp和谷歌搜索框有两次,并有不同的前景时间。
任何人都可以告诉我为什么我会两次获得它,并且有一种方法可以让我只获得活动在ForeGround中的时间。
答案 0 :(得分:1)
运行命令时:
adb shell "ps -x | grep google"
我得到以下输出(截断):
u0_a22 1977 1267 1480140 46296 ep_poll 0000000000 S com.google.android.googlequicksearchbox:interactor (u:2, s:7)
u0_a22 2115 1267 1895332 210352 ep_poll 0000000000 S com.google.android.googlequicksearchbox:search (u:1866, s:7987)
这意味着googlequicksearchbox
应用程序在两个不同的进程中运行(由进程名称和PID区分)。
您获得的时间是前台进程。这意味着here。这不仅意味着这些活动。
通常,当以简单的方式打开应用程序时,没有其他方法可以获得时间。这是因为,应用程序可以显示活动,服务和持续通知。所有这些都可能会影响用户体验。考虑Facebook Chat Heads。它们可能位于屏幕的一角,对用户可见,但另一个应用程序被打开(其中一个活动是在onResume
事件之后)。但Facebook正在前景中运行,用户看到它。因此前台至少有2个正在运行的应用程序。
如果包名称完全相同,解决方案就是总结结果。或者另一种方法是在后台运行常量服务,一次检查运行的应用程序。但这是一个更耗时且劳动密集的解决方案。