android– 等到su中的命令完成

android– 等到su中的命令完成,第1张

概述我在Android中运行一个su进程,每当用户摇动手机时,它自己运行screencap实用程序(/system/bin/screencap).我想等待每个screencap完成之后我允许用户通过摇动手机来取另一个screencap.但是,使用process.waitFor()对我来说不起作用,因为我不想关闭su进程并为每个screencap重新

我在Android中运行一个su进程,每当用户摇动手机时,它自己运行screencap实用程序(/ system / bin / screencap).

我想等待每个screencap完成之后我允许用户通过摇动手机来取另一个screencap.但是,使用process.waitFor()对我来说不起作用,因为我不想关闭su进程并为每个screencap重新打开它(因为它会提示SuperUser应用程序的toast,这会干扰screencaps)

到目前为止,我有:

在服务的onCreate():

p = Runtime.getRuntime().exec("su");os = p.getoutputStream();

在shake Listener处理程序中:

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完成的代码片段.

解决方法:

我找到了一个方法!我使用shell命令echo -n 0(-n来防止换行)然后将其读回来回显单个字符(例如0).在screencap命令完成之后,shell将不会打印字符,并且inputStream#read()方法将阻塞,直到它可以读取该字符…或者在代码中说:

在服务的onCreate():

p = Runtime.getRuntime().exec("su");os = p.getoutputStream();is = p.getinputStream(); // ADDED THIS liNE //

在shake Listener处理程序中:

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}
总结

以上是内存溢出为你收集整理的android – 等到su中的命令完成全部内容,希望文章能够帮你解决android – 等到su中的命令完成所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1117831.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存