3

我需要检测是否启动了应用程序,并且我已经读过 API 中没有任何东西可以实现这一点。有人建议授予应用程序读取日志并继续轮询它们的权限,但自 JB 以来此解决方案不起作用。我还发现,由于我只需要知道顶层应用程序是否发生更改,因此我可以执行以下操作:

ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
String str = ((ActivityManager.RunningTaskInfo)am.getRunningTasks(1).get(0)).topActivity.getPackageName();

但我需要知道哪种方式是进行这种连续轮询的最佳方式,当然还有——当然——是否还有其他方式可以做到这一点。

4

2 回答 2

5

您可以使用无障碍服务 http://developer.android.com/reference/android/view/accessibility/AccessibilityEvent.html并捕获窗口更改事件

于 2013-08-30T13:32:57.057 回答
3

由于人们使用应用程序并且人们需要时间来阅读屏幕上的信息,因此前台应用程序的可见时间通常少于几秒钟。

如果您尝试检测用户启动了哪些应用程序,然后有一个每秒轮询一次的后台服务以您指示的方式轮询列表,那么它应该可以正常工作并且不会耗尽电池,因为轮询将停止一旦系统进入睡眠状态。

于 2013-08-30T13:50:31.417 回答