android - 我可以以编程方式(根)从系统对话框中选择项目吗?
问题描述
我可以通过以下方式打开“使用 USB 到”系统对话框:
val p = Runtime.getRuntime().exec(arrayOf("su", "-c", "system/bin/sh"))
val stdout = DataOutputStream(p.outputStream)
stdout.writeBytes("am start com.android.settings/.UsbSettings")
stdout.flush()
stdout.close()
我还想以编程方式选择任何选项(例如“传输文件”)?
根植于Android的这可能吗?
更新
似乎我可以玩input keyevent
https://stackoverflow.com/a/28969112/9766649(例如61 --> "KEYCODE_TAB"
并且62 --> "KEYCODE_SPACE"
很有用)
解决方案
解决了!
例如,从对话框中选择第四项(“给这部手机充电”):
val process = Runtime.getRuntime().exec(arrayOf("su", "-c", "system/bin/sh"))
val stream = DataOutputStream(process.outputStream)
stream.writeBytes("am start com.android.settings/.UsbSettings\n")
stream.writeBytes("input keyevent 21\n") // KEYCODE_DPAD_LEFT
stream.writeBytes("input keyevent 20\n") // KEYCODE_DPAD_DOWN
stream.writeBytes("input keyevent 20\n") // KEYCODE_DPAD_DOWN
stream.writeBytes("input keyevent 20\n") // KEYCODE_DPAD_DOWN
stream.writeBytes("input keyevent 66\n") // KEYCODE_ENTER
stream.flush()
stream.close()
(要选择第一项,只需删除所有带有 的行KEYCODE_DPAD_DOWN
)
推荐阅读
- python - 如何使用json中的索引遍历键?(Python)
- node.js - NODE JS 更新集合中的特定字段而不影响其他字段
- javafx - LineChart 中没有显示任何内容
- lambda - 从 Curry-0、1、2 到 ...n
- spring-boot - 删除错误请求响应的附加详细信息
- javascript - react native中的androidsurfaceview原生ui组件渲染问题
- go - 为什么我在 go.mod 中指定了旧的 go 版本,却可以使用新版本的 go 的 API?
- google-apps-script - 如何在 Google Apps Script 中添加抄送、定制发件人姓名和获取主题行数据?
- python - 为什么它只打印二维列表中的 4 个值?
- javascript - 未调用时正在执行的函数