Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 以编程方式强制关闭应用程序_Android_Shell_Adb_Root_Su - Fatal编程技术网

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

Android 以编程方式强制关闭应用程序,android,shell,adb,root,su,Android,Shell,Adb,Root,Su,我需要制作一个应用程序,该应用程序可以通过编程执行强制停止按钮对应用程序执行的操作。(我正在使用root权限) 我尝试过以下代码: private void killApp(){ try { int pid = getPid(com.XXX); if(pid != -1){ String command = "kill "+pid; Log.i("Got PID",pid + "");

我需要制作一个应用程序,该应用程序可以通过编程执行强制停止按钮对应用程序执行的操作。(我正在使用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;
}
不执行强制停止按钮所做的操作,因为在执行此代码后,强制停止按钮不会变灰


使用root如何以编程方式执行应用程序信息中的强制停止按钮所做的操作?

您正在用引号括起变量
packageName

if(info.processName.equalsIgnoreCase(“packageName”))

如果(info.processName.equalsIgnoreCase(packageName))我找到了一个解决方案,请将其替换为
if(info.processName.equalsIgnoreCase(packageName))

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
是要强制停止的应用程序的包名

对于强制
杀伤
,使用
“杀伤-9”

因此,替换
String命令=“kill”+pid带有

String command = "kill -9 "+pid; 
另外,在
os.flush()之后行添加

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

这很有效。

你是对的。我修复了这个bug,但我仍然无法强制停止使用ROOT的应用程序。你有没有非root的解决方案?@ dhanuk是的,它确实如此。
os.close(); 
suProcess.waitFor();
android.os.Process.killProcess(android.os.Process.myPid());