首页 > 解决方案 > 作为系统应用程序,通过包名杀死另一个进程

问题描述

我正在android上开发一个看门狗系统服务。如果我检测到某些前台应用程序被阻止/停止,我想强制重启应用程序。

我已经尝试过杀死后台应用程序,但没有成功(因为我正在尝试杀死前台应用程序)。此外,通过 exec(adb shell su killall com.package.name) 在没有权限的情况下崩溃,因为我是“只是”系统,而不是根设备。

标签: android

解决方案


终于有办法了。

您可以通过以下方式获取 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 设备。


推荐阅读