我正在运行一个su
Android 中的进程本身运行 screencap 实用程序(/system/bin/screencap
)每次用户摇晃手机时。
我想等待每个屏幕截图完成,然后再允许用户通过摇动手机拍摄另一个屏幕截图。然而,使用process.waitFor()
对我不起作用,因为我不想关闭su
处理并为每个屏幕截图重新打开它(因为它会提示超级用户应用程序的 toast,这会干扰屏幕截图)
到目前为止我有:
在服务中的onCreate()
:
p = Runtime.getRuntime().exec("su");
os = p.getOutputStream();
在摇动侦听器处理程序中:
if (isReady) {
isReady = false;
String cmd = "/system/bin/screencap -p " + nextScreenshotFullPath + "\n";
os.write(cmd.getBytes("ASCII"));
os.flush();
[INSERT MAGIC HERE]
isReady = true;
Bitmap bm = BitmapFactory.decodeFile(nextScreenshotFullPath);
// Do something with bm
}
其中 [INSERT MAGIC HERE] 是我正在寻找的 - 这段代码将等到screencap
完成。
我找到了一个方法!我回显一个字符(比如说,0
)使用 shell 命令echo -n 0
(-n
以防止换行)然后读回。 shell 直到执行完之后才会打印该字符screencap
命令已完成并且InputStream#read()
方法将阻塞,直到它可以读取该字符......或者用代码来说:
在服务的 onCreate() 中:
p = Runtime.getRuntime().exec("su");
os = p.getOutputStream();
is = p.getInputStream(); // ADDED THIS LINE //
在摇动侦听器处理程序中:
if (isReady) {
isReady = false;
String cmd = "/system/bin/screencap -p " + nextScreenshotFullPath + "\n";
os.write(cmd.getBytes("ASCII"));
os.flush();
// ADDED LINES BELOW //
cmd = "echo -n 0\n";
os.write(cmd.getBytes("ASCII"));
os.flush();
is.read();
// ADDED LINES ABOVE //
isReady = true;
Bitmap bm = BitmapFactory.decodeFile(nextScreenshotFullPath);
// Do something with bm
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)