如何在 android studio 中监听 shell 命令的响应?

2024-04-29

在 Android 终端模拟器中,我可以输入以下命令:

> su
> echo $(</sys/class/power_supply/battery/charge_rate)

根据手机的充电方式,输出将为“无”、“正常”或“涡轮”。我希望能够检索此输出并存储它作为字符串值在我的程序中。

所以我对此做了一些研究,我想出的代码如下:

    String chargeRate = "None";
    try {
        Runtime rt = Runtime.getRuntime();
        Process process = rt.exec("su \"\"echo $(</sys/class/power_supply/battery/charge_rate)");

        BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));

        if ((chargeRate = stdInput.readLine()) == null)
            chargeRate = "None";
    }
    catch (Exception e) {
        // TODO
    }

这是从许多不同的答案中得出的,我不太确定它有什么问题。我在调试时无法跨过或越过这一行:

if ((chargeRate = stdInput.readLine()) == null)

一旦调试器到达此行,它就会显示“应用程序正在运行”


UPDATE: 解决方案在无法使用 Runtime.exec() 在 Android Java 代码中执行 shell 命令“echo” https://stackoverflow.com/questions/25199307/unable-using-runtime-exec-to-execute-shell-command-echo-in-android-java-code :

Runtime.getRuntime.exec()不直接执行 shell 命令, 它执行带有参数的可执行文件。 “echo”是一个内置 shell 命令。它实际上是可执行文件 sh 参数的一部分 使用选项 -c。命令如ls是实际的可执行文件。你可以 使用type echo and type ls在 adb shell 中命令查看 不同之处。

所以最终的代码是:

String[] cmdline = { "sh", "-c", "echo $..." }; 
Runtime.getRuntime().exec(cmdline);

cat也可以从内部执行Runtime.exec()不调用sh

这也分析在https://www.javaworld.com/article/2071275/when-runtime-exec---won-t.html?page=2 https://www.javaworld.com/article/2071275/when-runtime-exec---won-t.html?page=2在段落中假设命令是可执行程序

代码在执行 shell 命令并在 TextView 中获取输出 https://stackoverflow.com/questions/23608005/execute-shell-commands-and-get-output-in-a-textview虽然它使用可以直接执行的命令(ls,请参阅上面的更新):

try {
        // Executes the command.
        Process process = Runtime.getRuntime().exec("ls -l");

        // Reads stdout.
        // NOTE: You can write to stdin of the command using
        //       process.getOutputStream().
        BufferedReader reader = new BufferedReader(
                new InputStreamReader(process.getInputStream()));

        int read;
        char[] buffer = new char[4096];
        StringBuffer output = new StringBuffer();
        while ((read = reader.read(buffer)) > 0) {
            output.append(buffer, 0, read);
        }
        reader.close();

        // Waits for the command to finish.
        process.waitFor();

        return output.toString();
    } catch (IOException e) {
        throw new RuntimeException(e);
    } catch (InterruptedException e) {
        throw new RuntimeException(e);
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 android studio 中监听 shell 命令的响应? 的相关文章

  • 如何在再次恢复应用程序时不重新加载webview?

    我做了一个网络视图应用程序 一切都运转良好 但是 当用户点击后退按钮并打开 恢复 应用程序时 它会重新加载 Web 视图 我该如何预防呢 MainActivity java public class MainActivity extends
  • GCM 无法唤醒设备

    我正在开发 GCM 应用程序 当设备不空闲时 即按电源按钮休眠 一切正常 但是 当我在设备空闲时发送消息时 设备不会唤醒 我做了以下事情 已验证服务器应用程序中的delay while idle未设置为true 每条消息使用不同的折叠键 多
  • Android模拟器中的互联网连接始终显示连接状态

    我尝试了多种方法来检查我的 Android 模拟器中的互联网连接 ConnectivityManager conMgr ConnectivityManager getSystemService Context CONNECTIVITY SE
  • 对在 C++ 应用程序中作为函数参数传递的文件运行“iconv”命令

    我正在尝试将 Windows 文件 CP1252 格式 转换为 Linux 应用程序的 UTF 8 格式 我想在我的 C 应用程序中运行以下命令 iconv f CP1252 t UTF 8 file ldf dos2unix gt out
  • 视图无法解析为类型

    这里的视图似乎有什么问题 我该如何解决它 错误 视图无法解析为类型 public void onItemClick AdapterView
  • 在Android中使用RxJava2插入SQLiteDatabase

    我在学习RxJava2在安卓中 谁能解释一下我们如何使用将数据插入 SQLiteDatabaseRxJava2 这是我尝试使用的代码示例 但它将数据插入数据库六次 单击时 getCompletableObservable subscribe
  • Android 从 C++ 端播放原始音频

    我需要能够在 Android 系统的 C 端以自定义文件格式传输音频 我正在致力于移植自定义媒体播放器 并且需要能够打开自定义文件并从中传输音频 这很重要 因为我认为从性能角度来看将整个播放器移植到 JAVA 是不可行的 并且通过 JNI
  • 在android中从JSON生成listview

    我对 Android 完全陌生 目前正在尝试从从我的服务器中提取的 JSON 数组生成列表视图 我已经阅读了很多教程 但没有运气 有一种独特的方法可以做到这一点 请您指出一些适合开始的资源 我读过了this http www josecgo
  • Cordova + android:无法从应用程序打开拨号盘或邮件意图

    我有一个奇怪的问题 我无法从应用程序中打开带有预定义号码或邮件意图的拨号盘 我正在使用 netbeans 8 0 1 创建 cordova 应用程序 我的 Cordova 版本是 4 0 0 我按照步骤创建了一个应用程序 并选择了 Hell
  • 在 Java 中如何找出哪个对象打开了文件?

    我需要找出答案哪个对象在我的 Java 应用程序中打开了一个文件 这是为了调试 因此欢迎使用工具或实用程序 如果发现哪个对象太具体了 这class也会很有帮助 这可能很棘手 您可以从使用分析器开始 例如VisualVM http visua
  • Android Gradle 问题 - Flutter / Dart

    我的 Gradle 同步有问题 我使用 IntelliJ 和 Android Studio 构建 Flutter Dart 应用程序 我添加了 2 个新的依赖项 现在 Gradle 出现了问题 在 Android Studio 中一切正常
  • Android 无法解析日期异常

    当尝试解析发送到我的 Android 客户端的日期字符串时 我得到一个无法解析的日期 这是例外 java text ParseException 无法解析的日期 2018 09 18T00 00 00Z 位于 偏移量 19 在 java t
  • 为什么 Google 建议将库复制到您的树中?

    谷歌的Play 服务 API 的使用说明 http developer android com google play services setup html 例如 说 将 extras google google play service
  • Android 4.4 Kitkat 自定义视图操作栏未填充整个宽度

    我试图拥有一个带有自定义视图的简单操作栏 但我得到以下结果 为了演示 我创建了一个带有黄色背景颜色的简单 xml 它应该占据整个宽度 这是 XML
  • 给出 5 个参数,但在终端中只得到 3 个参数

    我想将一个文件传递给一个c 程序 如果我在 IDE 中执行此操作 test string string lt test txt return argc 5 但在终端上我刚刚得到argc 3 看来 这是因为 什么是 lt 意思是 我正在使用
  • Android Studio代理设置构建错误

    每当我尝试在 Android Studio 中构建应用程序时 都会收到以下错误 Error 169 254 16 169 254 16 Will ignore proxy settings for these hosts 我收到错误 5 次
  • Android TextureView 和硬件加速

    我正在尝试实现上所示的示例这一页 http developer android com reference android view TextureView html 我已经在运行 android 4 及以上版本的三种不同设备上进行了尝试
  • React Native HTTPS Api 调用在 IOS 中有效,但在 Android 中无效

    所以基本上我所做的就是简单地对启用了 HTTPS 的 UAT 服务器进行简单的 Axios 调用 我已经在 IOS 中测试了整个应用程序 API 调用工作正常 但一旦我在 Android 中测试了相同的应用程序 在真正的 Android 设
  • android系统用户和linux root用户有什么区别

    当我将手机连接到电脑并使用adb shell与我的手机通信并输入的命令ps命令输出当前在我的手机上运行的进程信息 我发现有两个特殊用户 一个是root 另一个是system 据我所知 Android是基于linux的 所以root用户是最大
  • Activity 暂停时调用 FragmentManager.popBackStack 是否安全

    的文档FragmentManager popBackStack https developer android com reference android app FragmentManager html popBackStack java

随机推荐

  • SSIS将字符串变量保存到文本文件

    看起来应该很简单 但到目前为止我还没有找到一种方法将存储在 SSIS 字符串变量中的值保存到文本文件中 我研究过在数据流内部使用平面文件目标 但这需要数据流源 关于如何做到这一点有什么想法吗 使用脚本任务 我刚刚尝试过这个 我创建了一个文件
  • 如何使用 Webpack 同时创建包的“web”和“node”版本?

    有没有一种方法可以使用 Webpack 或 Browserify 一次性创建捆绑包的 web 和 node 版本 捆绑包的 web 版本将在客户端上使用 同一捆绑包的 节点 版本将在服务器上用于预渲染 同构 http nerds airbn
  • 当计算结果在 Linux 中产生非正规数时刷新为零

    我的 C 代码中的计算正在产生逐渐下溢 当发生这种情况时 程序将以 SIGFPE 终止 当计算产生逐渐下溢 非正常 时 如何将结果刷新为零 而不终止执行 我正在一台 redhat linux 机器上工作 谢谢 您还没有指定架构 我猜测它是一
  • pandas:groupby 和可变权重

    我有一个数据集 其中每个观察值都有权重 我想使用以下方法准备加权摘要groupby但我对如何最好地做到这一点感到生疏 我认为这意味着自定义聚合函数 我的问题是如何正确处理不是按项目的数据 而是按组的数据 也许这意味着最好分步进行 而不是一次
  • iOS 11 文件提供程序扩展中的项目

    我有一个带有文件提供程序扩展名的应用程序 我尝试使用此方法为 ios 11 的新文件应用程序提供支持link https developer apple com documentation fileprovider content and
  • 如何将批处理变量设置为另一个脚本的输出

    我尝试将批处理变量设置为另一个命令的输出 在 Linux Unix 中 您可以简单地使用反引号 例如 在 csh 中 set MY VAR tail etc passwd windows 批处理中有类似的东西吗 实际上我已经发现了一些东西
  • 递归循环遍历对象以构建属性列表

    情况 我有一个包含多个子对象和子子对象的大对象 其属性包含多种数据类型 出于我们的目的 该对象看起来像这样 var object aProperty aSetting1 1 aSetting2 2 aSetting3 3 aSetting4
  • 使用存储的日期字段来计算计算当前过去天数的字段

    我正在使用 MySQL 和 phpMyAdmin 我的数据库中有一个 日期 字段 我需要在 MySQL db 中创建一个字段 该字段将计算并显示自每个记录 行的 日期 字段中的日期以来已经过去的天数 我没有能力使用 PHP 即时生成代码 有
  • 如何重新初始化jquery数据表

    如何重新初始化 jQuery 数据表 我什至尝试删除表格元素 该表仍在显示 我的代码是这样的 function removeExistingDataTableReference tableid if oTable null oTable f
  • Delphi:平滑折叠/展开形式

    需要你的帮助 我一直在寻找 我在德尔福西雅图 试图平滑调整表单底部的大小 就我而言 调整大小 只是有点折叠 展开 如下所示 我怎样才能意识到这一点 我尝试过使用 TTimer procedure TForm1 Timer1Timer Sen
  • 在 (BOOL)webView 中:如何打开在 UIWebView 中单击的 URL 以打开模态 UIWebView

    感谢您查看我的问题 让我先描述一下该应用程序 我有一个适用于 iOS5 1 的基于选项卡栏的应用程序 它使用情节提要和 ARC 有四个选项卡 每个选项卡都有一个视图控制器 显示带有本地 HTML 文件的 Web 视图 每个视图是要显示的一组
  • this.http.get 的超时时间不能超过 2 分钟吗? [复制]

    这个问题在这里已经有答案了 我的 Angular 4 3 2 代码正在调用我的后端服务 需要 2 4 分钟才能返回 仅使用默认值this http get代码中 我看到默认超时在 2 分钟后开始 然而 当我尝试设置超过 2 分钟的超时时 它
  • Scala 中的特征和抽象方法重写

    我有一个基本抽象类 特征 它有一个抽象方法foo 它由几个派生类扩展和实现 我想创建一个可以混合到派生类中的特征 以便它实现foo 然后调用派生类的foo 就像是 trait Foo def foo trait M extends Foo
  • 将 numpy memmap 刷新到 npy 文件

    有没有一种方法可以将 numpy memmap 数组保存到 npy文件 显然 有一种方法可以从 a 加载这样的数组 npy文件如下 data numpy load input npy mmap mode r 但刷新文件并不等同于将其存储在
  • Visual Studio Community 2015 安装失败

    最近安装了VS 2015 windows 10 但是出现了一些包失败的情况 稍后详述 当尝试启动新项目时 我收到一条错误消息 无法创建编译器 所以我卸载并修复了微软可再发行组件并再次尝试 从那以后我根本无法安装VS 我收到以下消息 Rosl
  • 如何用CGAL获取多边形网格的顶点和面?

    With CGAL 我能够得到一个多面体网格OFF格式 例如 下面的程序构建两个四面体 计算它们的交集 并将结果返回到OFF文件 这OFF输出提供顶点坐标和顶点索引给出的面 但我想将顶点和面作为 C 变量 例如double顶点向量和int面
  • 当我们点击编辑器外部时如何隐藏ckeditor?

    这是我的代码 div div
  • Firebase 3 - 附加身份验证范围数据

    在 Firebase 3 文档中 他们说您可以获取其他范围数据 例如 可选 指定您想要从身份验证提供程序请求的其他 OAuth 2 0 范围 要添加范围 请调用 addScope 例如 provider addScope https www
  • 如何读取 stripe webhook 响应 [重复]

    这个问题在这里已经有答案了 我创建了 Coldfusion 文件来捕获 STRIPE Webhook 响应
  • 如何在 android studio 中监听 shell 命令的响应?

    在 Android 终端模拟器中 我可以输入以下命令 gt su gt echo class power supply battery charge rate 根据手机的充电方式 输出将为 无 正常 或 涡轮 我希望能够检索此输出并存储它作