2013-04-16 171 views
11

我已经搜索了此问题的计算器,发现: Android, Detect when other apps are launchedReliable way to detect application launch from home/desktop?,哪种回答我的问题,但它仍然不够。检测android活动启动

我想做 我想创建一个小部件/应用程序,显示设备的用户最近使用的应用列表和最常用的应用程序列表什么。

问题 如何获得有关应用程序的准确数据以构建最常用的应用程序列表。

基本信息

  • 我编译我自己的Android操作系统(4.2型)代码,所以我有机会获得 一切。
  • 我也在开发启动器。
  • 它需要通过CTS并获得Google批准。
  • 我可以使系统权限的应用程序。
  • 我知道这可能是Google的安全问题。

一些解决方案

最近的应用程序可以通过ActityManager,getRecentApps方法在那里找到,所以现在的问题。

我已经在网上搜索了这一点,并已经找到了以下解决方案:

  1. 使用服务来查询activityManager,getRunningTasks方法每X秒,并建立列表(innacurate信息,还使用了大量的batery)。
  2. 使用logcat中获取此信息(似乎是一个黑客对我来说,需要系统权限)
  3. 更改activityManager本身,以提供该信息(很可能会失败的CTS测试)
  4. 使用启动验证已启动的应用程序(错过了在其他应用程序内启动的应用程序)

还有其他的东西我错过了吗?

由于提前, 蒂亚戈科斯塔

+0

你漂亮与列出所有4个选项相当。我最喜欢的一个是使用'(ActivityManager)this.getSystemService(ACTIVITY_SERVICE);' – srf

+0

谢谢你的答案,我将尝试所有这些,看看哪一个最好。再次感谢。 –

+0

logcat不适用于Android 4。2和更高版本,除非你有root权限,请参阅https://groups.google.com/forum/?fromgroups=#!topic/android-developers/6U4A5irWang – mattlaabs

回答

1

Android的默认最近使用的应用对话框实现是你最好的参考,look here..check reloadButtons()

final ActivityManager am = (ActivityManager) 
       context.getSystemService(Context.ACTIVITY_SERVICE); 
     final List<ActivityManager.RecentTaskInfo> recentTasks = 
       am.getRecentTasks(MAX_RECENT_TASKS, ActivityManager.RECENT_IGNORE_UNAVAILABLE); 

可以在类似的方式尝试..

+0

如果您要发表评论,我已经尝试了所有4个步骤,并在启动器中捕获开始应用程序调用。它有几乎完美的信息,没有额外的处理。 –

+0

你能指定“近乎完美”吗?你错过了什么? –

+0

在不是我的启动器的其他活动中启动的应用程序。由于大多数人通过启动器启动活动,它符合我的目的。 –