android - 以编程方式连接和断开 Android 设备

标签 android usb disconnect

我需要找到一种方法(使用 Android 应用程序)以编程方式连接和断开 Android 设备与主机的连接。

我正在使用 Galaxy Nexus。我的目标是让一切尽可能接近库存,尽管我已经在内核中启用了详细的调试消息,并且为了查看它们已经在手机上启用了 root 访问权限以访问 /proc/kmsg (以及 shell 命令 dmesg)。

我确信有一种方法可以利用 root 访问权限来做我需要做的事情,但我所有的尝试都导致了 nix。

  • 弄乱/proc/bus/usb
  • /dev/bus/usb
  • 混淆
  • 在 MTP/PTP 之间切换(无法以编程方式进行)
  • 将 Android USB 小工具驱动程序制作成一个模块 <- ???

我将尝试弄清楚如何处理列表中的最后一个对象,因为这样我就可以 rmmodinsmod 生成结果 *.ko 在我的应用程序中,这将连接和断开电话。不过,我不确定此选项的可行性。

最佳答案

解决方案是在接近截止日期时出现的,所以我几乎可以肯定这不是最好的做事方式,但它满足了我的要求。

构建 Modded 内核(以允许 Hook 特定功能)

  • 修改内核配置以支持 Kprobes(将 CONFIG_KPROBES 设置为 Y)
  • android_setup() 定义 (driver/usb/gadget/android.c) 中移除“static”关键字
  • 构建内核

构建内核模块(提供连接和断开连接的实际功能)

  • 使用Kallsyms动态拉取android_setup()的绝对地址
  • 使用 kprobes,钩子(Hook) android_setup()
  • 设置两个定时器,每次调用 android_setup() 时执行
  • 第一个计时器设置为从现在开始 2 秒,第二个设置为从现在开始 2.005 秒
  • 两个计时器都将一个指向 struct usb_gadget 的指针作为它们的数据
  • 在各自的回调函数中,调用 usb_gadget_connect() 和 usb_gadget_disconnect(),这会在 Samsung Galaxy Nexus 上强制物理断开然后重新连接

构建应用程序

  • 必须 Root设备
  • 只需使用 SU 权限 -“insmod module_name”进行 shell 调用。在您调用 rmmod 之前,该模块会强制设备进入一个枚举周期,不断地断开连接并重新连接。

如果您有兴趣重复这些结果,请阅读此处发布的文档并随时向我发送任何问题。

https://docs.google.com/uc?export=download&id=0B9WchRkSOWwJbi10MGhLWUljT2s

关于android - 以编程方式连接和断开 Android 设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12979650/

相关文章:

c++ - 在 Windows 7 上使用 C++ 从 USB 读取数据

python - 多次串行写入后Arduino串行超时

node.js - 如何使用 Node.js 检测客户端互联网断开连接

android - 检测与 WiFi 接入点的断开连接

android - 通过 xml 从 AutoCompleteTextView 中删除下划线

android - 如何在 Spring 后端使用 Android 执行 GET

c - 在 Windows 上的 ReadFile 之前查看 USB HID 设备

mysql - 与 Rails 和 MySQL 的奇怪脱节

android - 键盘打开时 React Native ScrollView 不滚动

java - 什么更适合用于创建布局。 Java 还是 XML?