以编程方式执行adb命令时出错

时间:2015-07-31 10:02:25

标签: android shell adb screenshot

我正在尝试以编程方式执行adb命令

这是我的代码:

File f = new File(Environment.getExternalStorageDirectory(), "screen" + System.currentTimeMillis() + ".png");

new ExecuteCommand(MainActivity.this).execute("adb shell screencap -p "
        + Environment.getExternalStorageDirectory().getPath() +
        "/" + "screen" + System.currentTimeMillis() + ".png");

ExecuteCommand Class:

public class ExecuteCommand extends AsyncTask<String, String, String> {

    Context mContext=null;
    public ExecuteCommand(Context _ctx)
    {
        mContext =_ctx;
    }

    ProgressDialog progressdailog;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        progressdailog = ProgressDialog.show(mContext,
                "Executing", "Please Wait");
    }
    @Override
    protected String doInBackground(String... params) {
        Process p;
        StringBuffer output = new StringBuffer();
        try {
            p = Runtime.getRuntime().exec(params[0]);
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(p.getInputStream()));
            String line = "";
            while ((line = reader.readLine()) != null) {
                output.append(line + "\n");
                p.waitFor();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        String response = output.toString();
        return response;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        progressdailog.dismiss();
        Log.e("Output", result);
    }
}

日志中的问题:

  

07-31 15:26:31.832 18716-18716 / com.example E / Output:无法绑定'tcp:5038'*守护程序未运行。现在从端口5038开始*

我无法截取屏幕截图,但如果我在命令提示符下运行相同的命令,那么这很正常。

但是如果我执行

new ExecuteCommand(MainActivity.this).execute("ls");

这很好用。命令中的问题在哪里?

1 个答案:

答案 0 :(得分:5)

在您尝试访问设备的PC中执行命令时,将使用

adb shell。但是当您在设备上执行命令时,您不需要adb shell

这将是干净的:

new ExecuteCommand(MainActivity.this).execute("screencap -p " + f);