Android 活跃应用列表的获取分析

检测其他正在运营的应用,总计了六种方法,都无效,目前没有解决;
以下记录分析方案

  1. 正常获取,getRunningApp, ps 全局过滤;但这个在新版已经无法拿到信息;
    参考: https://cloud.tencent.com/developer/article/1720044
  2. 读取 PackageInfo 拿到包信息,倒推 context ,因为 context 需要进程信息,表示为运行的上下环境。这个无法拿到
    参考:https://blog.csdn.net/u011733869/article/details/83759556
  3. 遍历 pid ,读取 proc 文件。知道 pid 是一个 int 的值,然后命令 'cat /proc/pid/cmdline' 能拿到包,则就表明正在运行,但这个 shell 可以拿,应用层不可以。
  4. 拦截本地日志,做包信息分析。在 Android_studio 可以拿到日志列表,如果能拿到全量日志,直接过滤包名,也可以得到是否正在活跃。但目前只能拿到当前应用。
    android.permission.READ_LOGS
  5. 拦截流量,vpn ,数据过滤,需要协议分析,类似防火墙。这个需要有一个 vpn 的请求标识,进行所有流量的分析。感知性太强。
  6. 应用 applicationInfo 的状态。当状态值包含 FLAG_STOPPED 则认为是活跃。但这个有问题,这个状态值只要打开会被设置为 FLAG_STOPPED,但只有在应用活着的情况下通过杀死任务栈的方式才能改变状态。比如杀死进程、设备重启该状态都不能改变状态,所以可用性一般。

int FLAG_ALLOW_CLEAR_USER_DATA
int FLAG_ALLOW_TASK_REPARENTING
int FLAG_DEBUGGABLE
int FLAG_EXTERNAL_STORAGE
int FLAG_EXTRACT_NATIVE_LIBS
int FLAG_FACTORY_TEST
int FLAG_FULL_BACKUP_ONLY
int FLAG_HARDWARE_ACCELERATED
int FLAG_HAS_CODE
int FLAG_INSTALLED
int FLAG_IS_DATA_ONLY
int FLAG_IS_GAME
int FLAG_KILL_AFTER_RESTORE
int FLAG_LARGE_HEAP
int FLAG_MULTIARCH
int FLAG_PERSISTENT
int FLAG_RESIZEABLE_FOR_SCREENS
int FLAG_RESTORE_ANY_VERSION
int FLAG_STOPPED
int FLAG_SUPPORTS_LARGE_SCREENS
int FLAG_SUPPORTS_NORMAL_SCREENS
int FLAG_SUPPORTS_RTL
int FLAG_SUPPORTS_SCREEN_DENSITIES
int FLAG_SUPPORTS_SMALL_SCREENS
int FLAG_SUPPORTS_XLARGE_SCREENS
int FLAG_SUSPENDED
int FLAG_SYSTEM
int FLAG_TEST_ONLY
int FLAG_UPDATED_SYSTEM_APP
int FLAG_USES_CLEARTEXT_TRAFFIC
int FLAG_VM_SAFE_MODE

还有其他什么办法拿到正在活跃的 app 吗?

你可能感兴趣的:(Android 活跃应用列表的获取分析)