java - Runtime.exec() 和在 android 的终端中运行 shell 命令有什么区别
问题描述
我的摩托罗拉 G6 已植根,我有一个应用程序应该写入根文件以在主机模式和设备模式之间切换。该文件如下:
/sys/class/power_supply/usb/usb_otg
在 android 终端模拟器中,我键入以下命令:
$ su
# echo 3 > /sys/class/power_supply/usb/usb_otg
这些命令将使手机进入主机模式。我知道这是因为手机已连接到光谱仪,并且在我执行此命令时它已通电。
自从测试这些命令以来,我将以下代码放入我的应用程序中:
toastMessage("Attempting to power up spectrometer");
Runtime.getRuntime().exec("su");
Runtime.getRuntime().exec("echo 3 > /sys/class/power_supply/usb/usb_otg");
toastMessage("Reached this point");
此代码似乎没有任何错误,它运行到最后但它不为光谱仪供电。
我的问题是为什么这些命令可以在 Android Terminal Emulator 中运行,但不能通过 Runtime.exec() 运行?
解决方案
您需要使用此代码
toastMessage("Attempting to power up spectrometer");
Runtime.getRuntime().exec("su -c \"\"echo 3 > /sys/class/power_supply/usb/usb_otg");
toastMessage("Reached this point");
您需要在一个代码中执行 su 和其他代码。第二次要执行运行时代码时,它将在没有 su 权限的情况下执行。
推荐阅读
- spring - 使用 Spring Security 保护反应路由
- c++ - 非STL二叉搜索树搜索函数问题
- android - 为什么Realm Object扩展为模型类会报接口错误?
- node.js - 如何在 Loopback 4 中设置基本路径/前缀?
- c# - 如何在实体框架中使用 where 子句?
- google-cloud-platform - 如何设置 Cloudflare 和 Google Cloud Storage 以从折扣 CDN 互连链接中受益
- android - 由于现有相机用户,相机“0”的手电筒不可用
- reactjs - 如何将参数传递给 React 中类组件内的方法?
- selenium - 无法启动 Internet Explorer,而是尝试寻找 Opera 启动器
- java - @EntityScan 不扫描