2014-10-03 184 views
3

我需要制作一个应用程序,该程序可以通过程序以做什么强制停止按钮对应用程序起作用。 (我用权限)强制以编程方式关闭应用程序

ScreenShot

我曾尝试这样的代码:

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我怎样才能以编程方式执行应用程序信息中的强制停止按钮?

+0

你有没有针对非root的解决方案? – 2017-12-17 21:04:21

回答

10

取代它,我发现了一个解决方案:

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是应用力的包名停止。

1

你是封闭的可变packageName用引号

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

if(info.processName.equalsIgnoreCase(packageName))

+0

你说得对。我修复了这个错误,但我仍然无法使用root强制停止应用程序。 – SamJ 2014-10-03 20:27:51

1

的力kill,使用"kill -9"

所以用

String command = "kill -9 "+pid; 

而且更换String command = "kill "+pid;,后os.flush();行添加

os.close(); 
suProcess.waitFor(); 
1
android.os.Process.killProcess(android.os.Process.myPid()); 

这种运作良好。