我需要检测应用程序是否已启动,并且我已经读到API中没有任何内容可以实现此目的。 有人建议给应用程序读取日志的权限并继续轮询它们,但是这个解决方案从JB开始就不起作用了。 我还发现,因为我只需要知道顶部应用程序是否发生了变化,我可以执行以下操作:
ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
String str = ((ActivityManager.RunningTaskInfo)am.getRunningTasks(1).get(0)).topActivity.getPackageName();
但我需要知道哪种方式最适合进行连续轮询,当然 - 如果还有其他方法可以做到这一点。
答案 0 :(得分:5)
您可以使用辅助功能服务 http://developer.android.com/reference/android/view/accessibility/AccessibilityEvent.html并捕获窗口更改事件
答案 1 :(得分:3)
由于人们使用应用程序并且人们需要时间来阅读屏幕上的信息,因此前景应用程序通常不会在几秒钟内显示。
如果您正在尝试检测用户已启动的应用程序,那么拥有一个每秒轮询一次的后台服务,或者以您指示的方式轮询列表,那么它应该可以正常运行并且不会耗尽电池作为轮询系统一进入睡眠状态就会停止。