Android - 如何知道超级用户何时被授予我的应用程序?

时间:2013-06-21 03:43:28

标签: android

我的应用程序需要root访问权限。例如这段代码:

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();
        }

所以我知道我的root访问被拒绝的时间(从错误流中读取)。但是什么是授予的?怎么知道?

1 个答案:

答案 0 :(得分:-1)

来自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;
}