美文网首页
重启手机

重启手机

作者: Cheep | 来源:发表于2019-04-08 16:20 被阅读0次

测试调用 :

execCommand(new String[]{"am broadcast -a android.intent.action.BOOT_COMPLETED"}, true,true);

方法:

/**
 * execute shell commands
 *
 * @param commands        command array
 * @param isRoot          whether need to run with root
 * @param isNeedResultMsg whether need result msg
 * @return if isNeedResultMsg is false, {@link CommandResult#successMsg} is null and
 * {@link CommandResult#errorMsg} is null.
 * <p/>
 * <p/>
 * if {@link CommandResult#result} is -1, there maybe some excepiton.
 */
public static CommandResult execCommand(Object[] commands, boolean isRoot, boolean isNeedResultMsg) {
    int result = -1;
    if (commands == null || commands.length == 0) {
        return new CommandResult(result, null, null);
    }


    Process process = null;
    BufferedReader successResult = null;
    BufferedReader errorResult = null;
    StringBuilder successMsg = null;
    StringBuilder errorMsg = null;


    DataOutputStream os = null;
    try {
        process = Runtime.getRuntime().exec(isRoot ? COMMAND_SU : COMMAND_SH);
        os = new DataOutputStream(process.getOutputStream());
        for (Object command : commands) {
            String strCommand = String.valueOf(command);

            if (strCommand == null) {
                continue;
            }
            // donnot use os.writeBytes(strCommand), avoid chinese charset error
            os.write(strCommand.getBytes());
            os.writeBytes(COMMAND_LINE_END);
            os.flush();
        }
        os.writeBytes(COMMAND_EXIT);
        os.flush();


        result = process.waitFor();
        // get command result
        if (isNeedResultMsg) {
            successMsg = new StringBuilder();
            errorMsg = new StringBuilder();
            successResult = new BufferedReader(new InputStreamReader(process.getInputStream()));
            errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream()));
            String s;
            while ((s = successResult.readLine()) != null) {
                successMsg.append(s).append(COMMAND_RESULT_SEPARATOR);
            }
            while ((s = errorResult.readLine()) != null) {
                errorMsg.append(s).append(COMMAND_RESULT_SEPARATOR);
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if (os != null) {
                os.close();
            }
            if (successResult != null) {
                successResult.close();
            }
            if (errorResult != null) {
                errorResult.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }


        if (process != null) {
            process.destroy();
        }
    }
    return new CommandResult(result, successMsg == null ? null : successMsg.toString(),
            errorMsg == null ? null : errorMsg.toString());
}

CommandResult.java

public class CommandResult {
    public int result;
    public String successMsg;
    public String errorMsg;

    public CommandResult(int result, String successMsg, String errorMsg) {
        this.result = result;
        this.successMsg = successMsg;
        this.errorMsg = errorMsg;
    }
}

相关文章

网友评论

      本文标题:重启手机

      本文链接:https://www.haomeiwen.com/subject/vvplbqtx.html