2014-10-03 4 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(); 

가 강제 정지 버튼 후이 코드를 강제 정지 버튼 을 실행 않기 때문에 일을하지 않습니다하지이 회색으로 표시됩니다.

루트 사용 앱 정보에서 강제 정지 버튼이 프로그래밍 방식으로 수행하는 방법은 무엇입니까?

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가 힘을 응용 프로그램의 패키지 이름입니다

+0

비 루트에 대한 해결책이 있습니까? –

답변

10

로 교체 금리 변수 packageName을 둘러싸고있다 중지. 힘 kill에 대한

1

당신은 내가 해결책을 발견

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

if(info.processName.equalsIgnoreCase(packageName))

+0

당신이 옳았습니다. 나는 버그를 고쳤지 만 여전히 루트를 사용하여 앱을 강제 종료 할 수는 없습니다. – SamJ

1

은이 잘 작동

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

추가 그래서 os.flush(); 줄 끝에서, 또한

String command = "kill -9 "+pid; 

String command = "kill "+pid; 교체

"kill -9"를 사용합니다.