等待 su 中的命令完成

2024-01-13

我正在运行一个suAndroid 中的进程本身运行 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(使用前将#替换为@)

等待 su 中的命令完成 的相关文章

  • 包管理器已去世

    我收到一位安装了很多应用程序的用户发来的邮件 称当我的应用程序使用以下代码收集活动信息时 他遇到了问题 getPackageManager queryIntentActivities mAinIntent 0 完整来源在这里 https g
  • putExtra() 和 setData() 之间的区别

    putExtra 和 setData 有什么区别 我已经阅读了 android 文档 但没有太大帮助 还有之前的一个问题Intent setData 与 Intent putExtra https stackoverflow com que
  • 如何将Android中的cURL发送到REST服务

    我是 android 新手 我想从 REST 服务获取一些数据 但在初始化发送到 REST 服务的方法时遇到一些问题 您知道 REST 服务使用 cURL 来操作一些数据 POST PUT GET DELETE 现在如何在 android
  • Android 片段之间的阴影分隔符

    我有一个类似于平板电脑的 ICS Gmail 应用程序的布局 ListFragment左边是内容 右边是内容 我想知道如何构建布局 使两个片段之间有一个阴影分隔符 就像在 Gmail 应用程序中一样 如下所示 另外 由于这适用于这个问题 我
  • 使用Picasso从url保存图像?

    我正在尝试使用 API Picasso 保存图像 为了做到这一点 我正在尝试使用Target保存 但我无法完成这项工作 我怎么能这样做呢 Trying save image public static void imageDownload
  • android.view.InflateException:二进制 XML 文件行 #11:膨胀类 ImageView 时出错

    我只是尝试制作一个小的 android java xml 应用程序来计算游戏的分数 它给了我这个错误 Error inflateing class ImageView 有人知道解决方案吗 我实际上搜索了 ppl 说添加这个 android
  • startActivityForResult中的requestCode是什么意思

    我想知道我是否正确理解 requestCode 的概念 这个整数的用途是什么 我将其设置为哪个整数有关系吗 private static int CAMERA REQUEST 谢谢 requestCode 可帮助您识别您从哪个 Intent
  • ProgressBar.setInminateDrawable() 不起作用

    当我尝试更改我的 indeteminateDrawable 进度条就消失了 我必须更改我的进度条的可绘制对象 我尝试了invalidate requestLayout等 我不知道如何解决它 谢谢 这里的代码 progressBar setI
  • Android 解析 JSON 卡在 get 任务上

    我正在尝试解析一些 JSON 数据 我的代码工作了一段时间 我不确定我改变了什么突然破坏了代码 当我运行代码时 我没有收到任何运行时错误或警告 我创建一个新的 AsyncTask 并执行它 当我打电话时 get 在这个新任务中 调试器在此行
  • 如何使用共享首选项在两个 Android 应用程序之间共享数据?

    我有两个应用程序 App1 和 App2 我想使用共享首选项在 App1 中保存数据并在 App2 中访问 反之亦然 我可以在 App1 中保存数据并在 App2 中访问数据 但反之则不行 这就是我现在正在做的 在清单中 android s
  • phonegap html5 android 同步文件系统 IO

    如何使用 PhoneGaps 文件系统 API 同步读写文件 有可用的同步包装器吗 无法通过提供的 api 同步访问文件 从phonegap的实现方式猜测 我怀疑您是否可以编写一个插件来同步执行此操作
  • Android OptionsMenu问题,背景始终透明

    我的选项菜单总是不显示背景 背景是透明的 有谁知道如何摆脱这个 我的失败起源活动是从另一个自定义活动扩展的 我在 eclipse 上有这个项目 选项菜单工作正常 但自从我迁移到 AndroidStudio 后 选项菜单始终是透明的 我尝试更
  • 如何获取小区广播消息?

    我尝试像模拟人生一样获取小区广播消息的文本 但它不起作用 public class SMSReceiver extends BroadcastReceiver Override public void onReceive Context c
  • 如何向开关对象添加/更改波纹效果

    下面是我自定义的开关 红圈是默认的波纹效果 我发现设置一个波纹可绘制作为开关的背景 控制波纹的颜色
  • Android Jetpack Compose 尺寸随持续时间变化的动画

    如何在 Jetpack Compose 中添加内容大小更改动画的持续时间 尝试使用Modifier animateContentSize 并通过动画规格具有持续时间 但它只是突然进入或退出 没有观察到持续时间 Column Modifier
  • 按“重置应用程序首选项”后,我的应用程序的所有权限都被撤销

    我开发了一个应用程序 支持Android 6 0 当我在 设置 gt 应用程序 gt 重置应用程序首选项 中重置应用程序首选项时 我的应用程序的所有权限都将被撤销 并且应用程序不会重新启动 撤销权限后未能重新启动应用程序可能会导致许多意外崩
  • 如何解决android程序中的警告“从不本地读取”

    为什么我收到警告说 The field testscreen ScaleAnimToShow mVanishAfter is never read locally testscreen java testscreen src com tes
  • Android - 如何简单地拖放按钮?

    我在这里找到了一个适合初学者的教程 http androidrox wordpress com 2011 05 13 android sample app drag and drop image using touch http andro
  • Android Volley - 发布请求 - 无法在线工作

    我试图通过 Volley 发出 POST 请求 它在我的本地主机中工作得很好 但是当我将它移动到网络服务器时 响应为空 Java代码 RequestQueue queue Volley newRequestQueue this String
  • 如何减少 Android 中浮动 editText 提示和 editText 框之间的空间?

    我有一个带有浮动提示的 EditText 但我想知道如何减少浮动提示和 EditText 框之间的空间 现在我的用户界面看起来像https i stack imgur com ltfra jpg https i stack imgur co

随机推荐

  • Laravel 缓存获取所有带标签的项目

    在 Laravel 中 您可以使用以下标签将项目放入缓存中 Cache tags bans gt put result gt ip result gt reason 但我似乎无法找到一种方法来获取带有特定标签的所有项目 是否可以检索带有特定
  • 在此特定示例中如何将 Javascript 变量传递给 Twig

    以下代码在我的Twig模板 它用于加载CSS文件或其他文件 具体取决于用户选择的主题 这在一个简单的HTML页面但是当我尝试将其带到Twig我的模板Symfony应用程序我找不到通过的方法CSS路线 与Twig 到Javascript do
  • 如何在android studio中仅允许特定指纹

    我正在构建一个应用程序 我只想允许每个设备使用特定的指纹 指纹是原始的 真实的 有没有什么方法可以实现这个想法 也许可以转换成一个数字 我可以将其存储在数据库中并在需要时进行匹配 关于你的问题有几点 您可以使用根据设备中当前注册的指纹生成的
  • POST/GET 变量命名规则?

    在命名表单中的 POST 变量或查询字符串中的 GET 变量时 是否需要遵循任何规则 Thanks 从字面上回答这个问题 我所知道的命名确实没有 规则 POST and GETphp ini 中的数组键它是一个像其他数组一样的数组 看一眼键
  • 从州-县字符变量中提取州和县

    我在单个字符串变量中有州和县名称州 县 我想将它们分开以创建两个不同的变量 states and county 有些州有两个 甚至三个 单词 县也是如此 gt states county names df states county 1 C
  • 在 Google AppEngine 中检索 .txt 文件内容

    我正在尝试使用以下命令上传文本文件
  • 如何在asp.net core中修改HttpContext.Request.Form

    我有一个 HttpContext Request 对象 其表单中的数据是错误的 我想修复它并发送正确的 HttpContext HttpContext Request Form 是只读的 但如果不是 我就会简单地执行以下操作 HttpCon
  • Ionic 应用程序 - Cordova - Safari 调试不起作用

    过去 我能够在 iPhone 上运行 Ionic Cordova 应用程序并将其插入 Mac 然后在 Mac 上打开 Safari 并转到 Develop gt PHONE NAME gt localhost 来检查我的应用程序 目前 当我
  • 在两点之间创建 svg 弧

    我想要connect使用圆弧绘制两个 SVG 点 例如两个圆的中心 如果只有一个连接 则行
  • 给定一个十进制数,找到给出整数结果的最小整数乘数

    最好用一个例子来描述问题 假设我有一个十进制值 100 227273 100 227273 X Y 我需要找到给出整数 Y 的最小正整数 X 如果 100 227273 只是一个近似值 并且您想获得最佳有理近似值 请使用连分数 http e
  • 将 printf 与两个 UART 一起使用

    我已经实施了fputc and fgetc在 retarget c 中 通过 Cortex M3 上的 UART0 成功使用 printf 但是 我想要第二个 UART 通道来获取额外的调试信息 我怎样才能像使用 printf 集成 UAR
  • 代码签名证书有什么用?

    我的公司从赛门铁克订购了代码签名证书 并给了我使用它的任务 我不知道该怎么做 甚至在他们的网站上也没有明确的说明 我有一个 cer 格式的证书 当我尝试从 Visual studio 2013 属性窗口使用它时 它说该证书没有与之关联的私钥
  • 如何在R中显示代码的进度?

    我现在正在处理一个大型数据集 某些函数可能需要几个小时才能处理 我想知道如何通过进度条或数字 1 2 3 100 显示代码的进度 这是一个例子 谢谢 require Kendall mydata matrix rnorm 6000 300
  • 确保 Grails REST 服务与移动应用程序一起使用的安全

    我正忙于研究如何在移动应用程序中使用 REST 服务 希望能得到一些见解 场景如下 考虑一个向用户提供服务的 Web 应用程序 Web 应用程序也将成为用户的主要交互点 这将在 Grails 中完成 并通过 Spring Security
  • 如何使用Android不支持的java core lib?

    android中使用核心类时出现问题 DX 处理 javax xml bind Binder class 时遇到问题 我确实需要 javax xml 中的类来开发 Web 服务 但是 Android 不完全支持它 当我导入这些罐子时 有 e
  • 使用某种编程语言(JS/C#..)计算RSI(相对强度指数)

    我正在努力计算RSI Relative Strength Index 我有这样的数据 Date Close Change Gain Loss 计算公式是 RSI 100 100 1 RS where RS Average Gain Aver
  • ASP.NET Core Route 属性在整个控制器类中可用

    有没有办法让路由中指定的属性在整个类中可用 例如 考虑这个控制器 Route api store storeId controller public class BookController HttpGet id int min 1 pub
  • 使用 WooCommerce 中的电子邮件 ID 定位特定电子邮件通知

    我在 WooCommerce 中设置了自定义状态和自定义电子邮件 我想使用当前的电子邮件 WC Email 而不是电子邮件模板内变量的当前状态 我需要在电子邮件模板中添加一些 if 语句 我没有使用订单状态来确保如果手动重新发送来自订单的电
  • 为什么我的内核模块中出现“不适合设备的 ioctl”错误?

    设备错误的 ioctl 不适当 嘿 我在尝试构建内核模块时遇到问题 它是一个名为message slot 的字符设备模块 根据说明 它应该最多支持 256 个未成年人 所有专业相同 235 个 每个次要代表一个不同的设备文件 最多可以有 2
  • 等待 su 中的命令完成

    我正在运行一个suAndroid 中的进程本身运行 screencap 实用程序 system bin screencap 每次用户摇晃手机时 我想等待每个屏幕截图完成 然后再允许用户通过摇动手机拍摄另一个屏幕截图 然而 使用process