Android:如何获取前台应用程序的进程ID

时间:2017-12-26 12:24:48

标签: android go

首先,请注意,这个问题并非与所有" android前景应用程序"相同我在SO上找到的问题,请继续阅读: - )

我正在尝试编写一个Android应用程序供我自己使用,使用golang,不使用使用android-sdk或ndk(这是KEY点)。这很简单,只需使用golang编写一个http服务,编译它为arm cpu并且我的应用程序正在运行,只需访问http://localhost即可访问。

出于我的应用程序的目的,我需要知道当前运行的前台应用程序,以准确定义它:

1)前台应用程序是占用屏幕的应用程序,或具有"活动"什么 - 永远(原谅我,我不是一个Android开发人员)。

2)前台应用程序(例如服务)所依赖的任何内容都不是我感兴趣的内容。

3)如果手机已锁定/屏幕关闭,我希望解决方案告诉我没有前台应用程序。

由于我没有使用任何android,只是将手机视为Linux机器,我希望解决方案使用原生linux方式,例如通过inspect / proc,或通过调用任何已安装的android命令行工具(包括通过这些命令行工具发送消息),但不使用任何SDK / NDK方式,以便我必须使用java或将这些东西合并到我的应用程序中。

2 个答案:

答案 0 :(得分:0)

可以使用shell命令吗?

dumpsys activity | grep top-activity

答案 1 :(得分:0)

从 Android SDK 26 开始(如果我没记错的话)应用程序在 -one-User-per-App 上执行,因此(即)WhatsApp 在 UID=30 上运行,Telegram 在 UID=76 上运行,因此执行 ROOT 命令的“ps -A -o PID,USER,NAME”你可以解析输出,然后杀死你不想被执行的所有进程。

36119 u30_a149     <WhatsApp_packagename>
36203 u76_a211     <Telegram_packagename>
37399 root         [kworker/1:2H]
37423 u0_a329      su
38069 root         sh

如果没有 Root 权限,您将无法实现任何目标,因为不可能拒绝执行应用程序或在没有超级用户权限的情况下将其杀死。