2014-10-03 2 views
3

Мне нужно сделать приложение, которое может программно сделать то, что force stop кнопка делает приложения. (Я использую корень разрешений)Force Закрыть приложение программно

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

у вас есть решение для non root? –

ответ

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

1

для силы kill используйте "kill -9"

так заменить String command = "kill "+pid; с

String command = "kill -9 "+pid; 

Кроме того, после os.flush(); линии добавить

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

Это хорошо работает.

Смежные вопросы