2013-06-21 46 views
1

我的應用程序需要root訪問權限。例如下面的代碼:Android - 如何知道何時將超級用戶授予我的應用程序?

Process p; 
     try { 
      p = Runtime.getRuntime().exec("su"); 
      BufferedReader es = new BufferedReader(new InputStreamReader(p.getErrorStream())); 
      String line; 
      if((line = es.readLine()) != null) 
      { 
       if(line.contentEquals("Permission denied")) 
        Log.e("TrisTag", "ROOT isn't granted"); 
      } 
     } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     } 

所以我知道,當我的根訪問被拒絕(從錯誤流中讀取)。但是,關於授予的是什麼?如何知道?

回答

0

回答kevin.

public class Root { 

private static String LOG_TAG = Root.class.getName(); 

public boolean isDeviceRooted() { 
    if (checkRootMethod1()){return true;} 
    if (checkRootMethod2()){return true;} 
    if (checkRootMethod3()){return true;} 
    return false; 
} 

public boolean checkRootMethod1(){ 
    String buildTags = android.os.Build.TAGS; 

    if (buildTags != null && buildTags.contains("test-keys")) { 
     return true; 
    } 
    return false; 
} 

public boolean checkRootMethod2(){ 
    try { 
     File file = new File("/system/app/Superuser.apk"); 
     if (file.exists()) { 
      return true; 
     } 
    } catch (Exception e) { } 

    return false; 
} 

public boolean checkRootMethod3() { 
    if (new ExecShell().executeCommand(SHELL_CMD.check_su_binary) != null){ 
     return true; 
    }else{ 
     return false; 
    } 
    } 
} 

/** 
* @author Kevin Kowalewski 
* 
*/ 
public class ExecShell { 

private static String LOG_TAG = ExecShell.class.getName(); 

public static enum SHELL_CMD { 
    check_su_binary(new String[] {"/system/xbin/which","su"}), 
    ; 

    String[] command; 

    SHELL_CMD(String[] command){ 
     this.command = command; 
    } 
} 

public ArrayList<String> executeCommand(SHELL_CMD shellCmd){ 
    String line = null; 
    ArrayList<String> fullResponse = new ArrayList<String>(); 
    Process localProcess = null; 

    try { 
     localProcess = Runtime.getRuntime().exec(shellCmd.command); 
    } catch (Exception e) { 
     return null; 
    } 

    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(localProcess.getOutputStream())); 
    BufferedReader in = new BufferedReader(new InputStreamReader(localProcess.getInputStream())); 

    try { 
     while ((line = in.readLine()) != null) { 
      Log.d(LOG_TAG, "--> Line received: " + line); 
      fullResponse.add(line); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    Log.d(LOG_TAG, "--> Full response was: " + fullResponse); 

    return fullResponse; 
} 
相關問題