Закрыть (убить) другое приложение в моем приложении по имени пакета - PullRequest
0 голосов
/ 30 марта 2020

Я хотел бы закрыть (убить) другое приложение в моем приложении по имени пакета. Я пытаюсь что-то вроде этого, но этот код не закрывает приложение. что я делаю не так?

   public void amKillProcess(string package_name)
{
    ActivityManager am = (ActivityManager)this.GetSystemService(Context.ActivityService);
    IList<RunningAppProcessInfo> runningProcesses = am.RunningAppProcesses;

    foreach (RunningAppProcessInfo runningProcess in runningProcesses)
    {
        if (runningProcess.ProcessName.Contains(package_name))
        {
            Android.OS.Process.SendSignal(runningProcess.Pid, Signal.Kill);
            am.KillBackgroundProcesses(runningProcess.ProcessName);
        }
    }
}

PS Я добавил android.permission.KILL_BACKGROUND_PROCESSES, и с помощью этого кода я могу закрыть только свое собственное приложение

1 Ответ

0 голосов
/ 31 марта 2020

Если вы хотите убить фоновое приложение, проверьте следующий код

 public void amKillProcess(string package_name)
    {
        ActivityManager am = (ActivityManager)this.GetSystemService(Context.ActivityService);
        var runningProcesses = am.RunningAppProcesses;

        foreach (RunningAppProcessInfo runningProcess in runningProcesses)
        {
            if (runningProcess.ProcessName.Contains(package_name))
            {

                Android.OS.Process.KillProcess(runningProcess.Uid);
            }
        }
    }

И если вы хотите убить приложение переднего плана, вы можете использовать Adb

public class SuUtil
{
    private static Java.Lang.Process process;

    public static void kill(string packageName)
    {
        initProcess();
        killProcess(packageName);
        close();
    }

    private static void initProcess()
    {
        if (process == null)
            try
            {
                process = Runtime.GetRuntime().Exec("su");
            }
            catch (IOException e)
            {

            }
    }


    private static void killProcess(string packageName)
    {
        System.IO.Stream output = process.OutputStream;
        Java.Lang.String cmd = new Java.Lang.String("am force-stop " + packageName + " \n");
        try
        {
            output.Write(cmd.GetBytes());
            output.Flush();
        }
        catch (IOException e)
        {

        }
    }


    private static void close()
    {
        if (process != null)
            try
            {
                process.OutputStream.Close();
                process = null;
            }
            catch (IOException e)
            {

            }
    }

}
...