16

我试图杀死我的另一个应用程序。但是这段代码无法杀死我的另一个应用程序。我知道杀死另一个应用程序是一个坏主意。但我有一个学习的目的,我曾试图杀人。我的代码部分:

Button runningApp = (Button) findViewById(R.id.runningApp);
runningApp.setOnClickListener(new View.OnClickListener()
{
    @Override
    public void onClick(View v)
    {
        String nameOfProcess = "com.example.filepath";
        ActivityManager  manager = (ActivityManager)ApplicationActivity.this.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> listOfProcesses = manager.getRunningAppProcesses();
        for (ActivityManager.RunningAppProcessInfo process : listOfProcesses)
        {
            if (process.processName.contains(nameOfProcess))
            {
                Log.e("Proccess" , process.processName + " : " + process.pid);
                android.os.Process.killProcess(process.pid);
                android.os.Process.sendSignal(process.pid, android.os.Process.SIGNAL_KILL);
                manager.killBackgroundProcesses(process.processName);
                break;
            }
        }
    }
});

我添加了权限,它们是:

<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
<uses-permission android:name="android.permission.GET_TASKS" />

每次我看到LogCat时,特定的应用程序都在后台运行。我错在哪里?

4

2 回答 2

18

您只能终止与正在执行终止的进程具有相同用户 ID 的进程。如果您试图杀死自己的进程,它应该可以工作。否则你不能这样做(除非你有一个根设备并且你的应用程序有根权限)。

于 2012-08-20T11:58:30.567 回答
3

如果您的设备已植根并且您的应用程序位于 /system/app 中,那么您可以通过禁用和启用另一个应用程序来杀死另一个应用程序:

pm.setApplicationEnabledSetting(packageName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
pm.setApplicationEnabledSetting(packageName,PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0);

这将杀死该应用程序并使其再次可访问。请注意,主屏幕快捷方式会消失。

于 2014-03-31T07:05:36.777 回答