android 以编程方式强制关闭应用程序

qcuzuvrc  于 2023-02-27  发布在  Android
关注(0)|答案(4)|浏览(224)

我需要创建一个可以编程执行强制停止按钮对应用程序执行的操作的应用程序。(我正在使用root权限)

我试过这个代码:

private void killApp(){
    try {
        int pid = getPid(com.XXX);
        if(pid != -1){
            String command = "kill "+pid;
            Log.i("Got PID",pid + "");
            try {
                Process suProcess = Runtime.getRuntime().exec("su");
                DataOutputStream os = new DataOutputStream(suProcess.getOutputStream());

                os.writeBytes(command + "\n");
                os.flush();

                Log.i("Executed","Kill " + pid);
            } catch (IOException e) {
                // Handle error
            }   
        } else {
            Log.i("Not Found","App Not Found");
        }
    } catch (Exception e) {
        e.printStackTrace();  // Device not rooted! 
    }
}

private int getPid(String packageName){
    ActivityManager am = (ActivityManager)getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
    List<ActivityManager.RunningAppProcessInfo> pids = am.getRunningAppProcesses();
    int processid = 0;
    for(int i = 0; i < pids.size(); i++) {
        ActivityManager.RunningAppProcessInfo info = pids.get(i);

        Log.i("PID",pids.get(i) + "");
        Log.i("PID Package",info.processName);

        if(info.processName.equalsIgnoreCase(packageName)){
            processid = info.pid;
            return processid;
        } 
    }
    return -1;
}

但问题是找不到进程,即使强制停止按钮没有变灰。
即使使用:

Process suProcess = Runtime.getRuntime().exec("su");
                        DataOutputStream os = new DataOutputStream(suProcess.getOutputStream());

                        os.writeBytes("kill "+ APP_PID + "\n");

                        os.flush();

不执行强制停止按钮执行的操作,因为在我执行此代码后,强制停止按钮没有变灰。
使用root如何通过编程完成应用程序信息中强制停止按钮的功能?

g0czyy6m

g0czyy6m1#

我找到了一个解决方案(需要根设备):

Process suProcess = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(suProcess.getOutputStream());

os.writeBytes("adb shell" + "\n");
                        
os.flush();
                        
os.writeBytes("am force-stop com.xxxxxx" + "\n");
                        
os.flush();

其中com.xxxxxx是要强制停止的应用程序的包名称。

sulc1iza

sulc1iza2#

您将变量packageName括在引号中
if(info.processName.equalsIgnoreCase("packageName"))
将其替换为if(info.processName.equalsIgnoreCase(packageName))

pcww981p

pcww981p3#

对于力kill,使用"kill -9"
因此将String command = "kill "+pid;替换为

String command = "kill -9 "+pid;

此外,在os.flush();行之后添加

os.close(); 
suProcess.waitFor();
ql3eal8s

ql3eal8s4#

android.os.Process.killProcess(android.os.Process.myPid());

这个很好用。

相关问题