默认/系统Android进程

时间:2013-02-15 00:42:29

标签: android process

我目前正在开发一个Android项目,该项目监视用户正在运行的应用程序,并使用设备内部存储的白名单交叉检查相应的进程。

为了使这项工作,我需要知道设备的默认或系统进程是什么,所以我可以将它们添加到白名单。话虽如此,我有几个问题,我希望你能回答:

  1. 有没有办法区分必须运行的默认/系统进程和属于设备上应用程序的进程?

  2. 是否有不同的默认/系统进程,具体取决于用户运行的Android手机/版本?

  3. 如果是这样,这些流程名称是否可供开发人员使用?或者还有其他方法可以获得它们吗?

  4. 如果我需要详细说明,请告诉我,谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

假设您尝试ActivityManagergetRunningAppProcesses()。迭代该RunningAppProcessInfo个对象数组,找到importance IMPORTANCE_FOREGROUND的对象。如果文档是正确的(没有尝试过这个),那么应该只有一个进程IMPORTANCE_FOREGROUND - 真正位于UI前景的进程。

(服务可以调用startForeground()方法获取前台优先级,但我猜他们有IMPORTANCE_PERCEPTIBLE

然后,您可以检查该前台流程的pkgList,并将其与您的白名单进行比较。

但是,如果出现以下情况,则会出现这种情况:

  • 异步弹出的东西(闹钟应用,来电等)

  • 逻辑上位于白名单中的应用程序会发生影响其程序包名称的更改(例如,开发人员发布了学生付费的“专业”应用程序,白名单只有免费应用程序)

  • 如果设备有多个可见项目(例如,三星的多窗口功能),如果所有可见应用都不是IMPORTANCE_FOREGROUND

这至少解决了学生无法控制的纯背景问题,包括你的“默认/系统进程”。

但是,它需要您不断轮询,这将严重损害电池寿命。这加上隐私影响对我来说意味着这个应用程序最多只能用于考试,应该是学生可以在考试前不久安装并在考试后不久删除的东西。

答案 1 :(得分:0)

我认为我和我的团队到目前为止已经提出了最好的解决方案。阅读Android文档后,我们发现通过使用ActivityManager.getRunningServices(),我们可以使用常量FLAG_SYSTEM_PROCESS来确定哪些进程是核心系统进程。然后我们要做的就是用运行过程的总列表进行交叉检查,以区分它们。

相关问题