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

Posted

技术标签:

【中文标题】以编程方式强制关闭应用程序【英文标题】:Force Close an app programmatically 【发布时间】:2014-11-28 22:21:49 【问题描述】:

我需要制作一个可以以编程方式执行强制停止按钮对应用程序执行的操作的应用程序。 (我正在使用 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 如何以编程方式执行应用信息中的强制停止按钮的作用?

【问题讨论】:

非root有什么解决办法吗? 【参考方案1】:

我找到了解决办法:

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

【讨论】:

@DhanuK 是的,确实如此。【参考方案2】:

您将变量 packageName 用引号括起来

if(info.processName.equalsIgnoreCase("packageName"))

将其替换为if(info.processName.equalsIgnoreCase(packageName))

【讨论】:

你是对的。我修复了这个错误,但我仍然无法使用 root 强制停止应用程序。【参考方案3】:

强制kill,使用"kill -9"

所以用

替换 String command = "kill "+pid;
String command = "kill -9 "+pid; 

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

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

【讨论】:

【参考方案4】:
android.os.Process.killProcess(android.os.Process.myPid());

这很好用。

【讨论】:

以上是关于以编程方式强制关闭应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式强制停止我的 android 应用程序?

强制用户在 iOS 中以编程方式更新应用程序

是否可以强制 Node.js / Electron 应用程序以编程方式使用高性能(离散)GPU?

如何在 Windows 中以编程方式强制重启/重新加载 Playback 设备?

是否可以以编程方式强制 iOS 应用程序在拆分视图/滑动中在 ios9 中全屏显示?

如何以编程方式关闭/禁用 NFC?