有两个设备都装的有 ANDROID 系统,都带有 USB 口,目前拟定了一个场景,A 设备里的 APP 运行,一直监听 USB 口 当 A 设备的 USB 插上线并且另外一端插在 B 设备上,B 设备的 APP 通过 USB 和 A 设备的 APP 进行验证通信。
由于不是专业做 ANDROID,Java 转过来的,请教几个问题: 1.这种场景的设定可行吗 2.有没有相关资料或者技术原型可以参考
1
icedx 2018-01-30 15:49:46 +08:00
|
2
whileFalse 2018-01-30 16:17:00 +08:00
你的目的是什么?
|
3
mx3y OP @whileFalse 要申请证书,如果两个设备没连接就需要申请两个太麻烦了。所以出此下策,让 B 设备不连接 A 设备,B 设备的 APP 就无法使用
|
4
podel 2018-01-30 16:50:04 +08:00
唔,n 久以前倒是试过在一台手机上用 adb 连接另外一台手机。(前提是启用了 usb 调试模式)(需不需要 root 不清楚,我是以 root 运行的,但是 adb 实际上是不需要 root 的)。
|
5
whileFalse 2018-01-30 17:31:26 +08:00
@mx3y #3 能详细说说么。为啥一定通过 usb 通讯,网络通讯不行么。
|
6
mx3y OP |
9
Karblue 2018-01-30 18:18:29 +08:00
俩 APP 都检测 USB 口。 然后 WIFI 内通信或者蓝牙直连通信。可以的
|
11
XinLake 2018-01-30 19:32:43 +08:00
看了楼主要恶补一下 USB (通用串行总线)技术原理。
USB 口严格来说不是通信意义上的接口,USB 是用来扩展设备的。并且是主从模式,必须一个主机( Master ),一个从机( Slave ),所有的动作都是主机主动发起,不存在监听、检测一说。 U 盘插到电脑,电脑多出 U 盘,OS 多了个海量存储设备,OS 是主,U 盘是从。 你手机 USB 调试插到电脑,电脑多出个 Android 设备(还有其他的),电脑是主,手机是从。 你要 2 个 APP 通信,其中一方必须要吧 USB 设置为主( USB 支持 OTG 才行),通讯是主主动发起,另外一方听命令就行。不是“网络连接”模式的通讯。 设想的场景很难实现 |
12
ljbha007 2018-01-30 19:47:21 +08:00
其中一台有 USB host 芯片或者 USB OTG 内核模块是可以的 不一定要用谷歌那个 ADK 你自己用 C 写个驱动用 JNI 来调用都可以的
|
21
XinLake 2018-01-31 18:51:41 +08:00
@mx3y USB 硬件很多都支持 OTG,但是你的设想很难。
两个设备通过 USB 连接上以后,HOST APP 通讯的是一个 USB 设备,APP 和这个设备通讯都有规范,USB 设备连上 HOST 之后 USB 接口就透明了。 说白了,USB 不是提供一个连接,而是给主机拓展了一个设备。 假设 2 个设备分为 A B,假如 A 作为 HOST,B 作为 U 盘(海量存储设备)。此时 A 的 APP 能够访问 B,但只是基于 USB 设备协议规范上的通信,设备有啥功能只能用啥功能。如果要实现 2 个 APP 通信,可以设想一下 B 写个文件到存储区,然后 A 在读取这个文件,这样如果你觉得适合就可以。 |
22
sungykk 2018-02-08 21:53:07 +08:00
提供一个相关原型:
汽车中控上的手机互联就是和这个类似,导航车机端运行 Android , 手机可以是 ios 或者 android, 通过 usb 线和车机连接。连 ios 时车机端要切换成 device 模式,android 手机的话车机端要切换成 host。 两端都安装手机互联 app, 通过 adb + socket 的方式通信。连接鉴权成功后手机的画面会通过 usb 传输投射到车机端上。 之前做过一个项目是利用百度 carlife app 实现通信的,但是 Linux 平台还要移植 adb,android 平台应该更简单。 |