Android系统如何查询是哪个应用开启了移动数据开关
查询移动数据开关触发进程的可行方案
调试场景(无需Root,仅适用于开发测试阶段)
- 首先打开目标设备的「开发者选项」,开启USB调试并连接到电脑
- 执行以下命令监听系统移动数据切换日志:
adb logcat -s ConnectivityService | grep "setMobileDataEnabled" - 日志输出中会直接携带触发请求的应用UID,格式示例:
setMobileDataEnabled: enabled=true, uid=10234 - 拿到UID后执行以下命令匹配对应的应用包名:
adb shell pm list packages -U | grep 10234
注意:该方法依赖系统日志缓存,仅能查询到最近几小时内的开关变更记录,无法回溯更早的历史操作
长期记录/历史查询场景(需要Root或ROM定制权限)
- 若设备已Root,可直接读取系统持久化日志文件
/data/system/connectivity-service.log,该文件会记录所有移动数据开关的变更时间、触发UID、对应包名信息 - 若要自定义生成历史日志,可开发系统级监听服务,监听
android.intent.action.ANY_DATA_STATE_CHANGED广播,收到广播时调用getCallingUid()方法获取请求发起进程的UID,匹配包名后写入本地持久化文件即可
此前常见的移动数据状态查询方法仅能获取开关当前状态,无法拿到操作触发主体信息,必须通过系统服务层的日志或系统级API才能获取对应数据
内容的提问来源于stack exchange,提问作者bounxye
相关产品推荐
相关产品推荐

