Android 运行getSystemService(Context.USAGE\u STATS\u SERVICE)时复制PackageNames;
我正试图在我的Android手机上获取每个活动的活动时间 我执行的代码如下Android 运行getSystemService(Context.USAGE\u STATS\u SERVICE)时复制PackageNames;,android,usage-statistics,Android,Usage Statistics,我正试图在我的Android手机上获取每个活动的活动时间 我执行的代码如下 @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) public List<UsageStats> getUsageStats() { UsageStatsManager mUsageStatsManager = (UsageStatsManager) getActivity() .getSystemSer
@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;
}
我得到的结果如下
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和google搜索框有两个,并且有不同的前景时间
有人能告诉我为什么我会得到两次,有没有办法让我只得到活动在前台的时间量。运行命令时:
adb shell "ps -x | grep google"
我得到以下输出(截断):
这意味着googlequicksearchbox
应用程序在两个不同的进程中运行(进程名称和PID有所不同)
您得到的时间用于前台进程。描述了这意味着什么。这不仅意味着这些是活动
当应用程序以一种简单的方式打开时,通常没有其他方法来获取时间。这是因为,应用程序可以显示活动、服务和持续通知。所有这些都可能会影响用户体验。考虑一下脸谱网聊天头。它们可能位于屏幕的一角,用户可以看到,但另一个应用程序被打开(它的一个活动是在onResume
事件之后)。但Facebook是在前台运行的,用户可以看到它。所以前台至少有两个正在运行的应用程序
如果包名完全相同,那么解决方案就是对结果进行汇总。或者另一种方法是在后台运行常量服务,偶尔检查一下正在运行的应用程序。但这是一个更加耗时和劳动密集型的解决方案。对我来说很有意义!
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)