android - 作为系统应用程序,通过包名杀死另一个进程
问题描述
我正在android上开发一个看门狗系统服务。如果我检测到某些前台应用程序被阻止/停止,我想强制重启应用程序。
我已经尝试过杀死后台应用程序,但没有成功(因为我正在尝试杀死前台应用程序)。此外,通过 exec(adb shell su killall com.package.name) 在没有权限的情况下崩溃,因为我是“只是”系统,而不是根设备。
解决方案
终于有办法了。
您可以通过以下方式获取 pid 名称
private int getAppUid(String packageName){
ActivityManager mActivityManager = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> pidsTask = mActivityManager.getRunningAppProcesses();
for(int i = 0; i < pidsTask.size(); i++) {
if (pidsTask.get(i).processName.equals(packageName)){
return pidsTask.get(i).uid;
}
}
return -1;
}
在那之后,你可以杀死它
android.os.Process.killProcess(pUID);
适用于我的 android 7 设备。
推荐阅读
- php - PHP 5 到 7 迁移中的字符 �。可能是编码问题?
- vba - 拆分并保存带有注释 VBA 中名称的单个 powerpoint 幻灯片
- task - Jira 中的技术故事应该是故事还是任务?
- html - 是否有适合对象:包含电子邮件的替代方案?
- python - Selenium 失去了它应该点击的元素的焦点(python)
- javascript - 在 -webkit-scrollbar 上添加过渡
- mysql - 如何将sql查询传输到包含&的django orm代码
- java - 如何解决 IllegalArgumentException:Java 中没有枚举常量 ClientRequest.TwoNumbersEnum.1?
- c# - .Net 中是否有任何用于 XModem 的第三方库可以帮助更新固件?
- bash - 如何从 csv 文件 sing bash 脚本中获取键的值?