我正在开发一个Android应用程序,我必须在其中与USB设备进行通信。我尝试在我的应用中使用标准谷歌API,但设备列表总是空的。
如果我使用谷歌api的USB设备信息相同的事情。通过google api搜索的设备列表为空,
lsusb给出以下结果:
Bus 001 Device 001: ID 1d6b:0001
Bus 002 Device 001: ID 1d6b:0002
Bus 003 Device 001: ID 1d6b:0001
Bus 002 Device 002: ID 2226:0014
我的设备是2226:0014
日食记录:
I/USB3G(92): event { 'add', '/devices/platform/sw-ehci.1/usb2/2-1', 'usb', '', 189, 133 }
I/USB3G(92): path : '/sys/devices/platform/sw-ehci.1/usb2/2-1'
I/USB3G(92): VID :size 5,vid_path '/sys/devices/platform/sw-ehci.1/usb2/2-1/idVendor',VID '2226
I/USB3G(92): '.
I/USB3G(92): PID :size 5,Pid_path '/sys/devices/platform/sw-ehci.1/usb2/2-1/idProduct',PID '0014
I/USB3G(92): '.
I/USB3G(92): cmd=/system/etc/usb_modeswitch.sh /system/etc/usb_modeswitch.d/2226_0014 &,
I/USB3G(92): excute ret : 0,err:No such file or directory
如果我插入像rs232适配器,蓝牙加密狗这样的设备,没有任何反应,API和lsusb没有任何结果。
设备的Prtocol基于ezusb库。 Android v。:4.0.3 内核版本:3.0.8 固件版本:crane_evb-eng 4.0.3 IMLK74k 20120330
有没有办法通过API访问隐藏的USB设备,还是应该通过编写驱动程序并将其修补到固件来实现对该设备的支持?
更新:即使我在* system / etc / usb_modeswitch.d / *中创建名称为2226_0014的信息文件 包含
DefaultVendor= 0x2226
DefaultProduct=0x0014
TargetVendor= 0x2226
TargetProductList="0014"
MessageEndpoint="0x00"
NeedResponse=1
CheckSuccess=20
我得到同样的错误:“没有这样的文件或目录”
答案 0 :(得分:43)
要启用USB主机API支持,您应添加名为
的文件
的 android.hardware.usb.host.xml 强>
并包含以下几行:
<permissions>
<feature name="android.hardware.usb.host"/>
</permissions>
进入文件夹
/system/etc/permissions
在该文件夹中查找名为
的文件handheld_core_hardware.xml or tablet_core_hardware.xml
并添加
<feature name="android.hardware.usb.host" />
进入<permissions>
部分。
重新启动您的设备。 usb host api应该可以工作。
使用android 4在CUBE U30GT上测试。
答案 1 :(得分:6)
出色!这适用于运行Android 4.0.4的Envizen V700NA。
小错字:<feature name="android.hardware.usb.host">
应该是:<feature name="android.hardware.usb.host"/>
步骤:
答案 2 :(得分:2)
在micromax A120帆布2手机(kitkat 4.4.2)上像魅力一样工作。现在我可以控制我的Arduino!我使用busybox工具来完成所有命令行工作(否则chmod不会工作)。我的步骤(可能有些不需要):
(0)在我的Windows 8计算机上安装PDAnet驱动程序(http://pdanet.co/a/)。 (1)在http://www.mgyun.com/m/en使用Vroot(现在称为iRoot)根电话。非常简单,唯一的问题是su grant / deny页面部分是中文,没什么大不了的。 (2)安装busybox和jackpal的Android-Terminal-Emulator(参见github https://github.com/jackpal/Android-Terminal-Emulator或play store https://play.google.com/store/apps/details?id=jackpal.androidterm&hl=en)
(3)打开一个终端窗口,成为超级用户:
# su
(4)文件系统可能是只读的,因此您可能需要重新安装它:
# mount -o rw,remount -t yaffs2 /
或
# mount -o rw,remount -t rootfs /
或
# mount -o rw,remount -t rootfs rootfs /system
见http://www.pocketmagic.net/write-on-the-android-read-only-file-system/ 另请参阅Android 2.3 : Read-Only file system stuck 还有,https://ckirbach.wordpress.com/2012/11/27/how-to-remount-system-as-read-write-in-android/
(5)make default.prop read / write:
chmod 666 /default.prop
(6)编辑/default.prop,进行以下更改:
ro.secure=0
ro.debuggable=1
persist.service.adb.enable=1
见https://android.stackexchange.com/questions/28653/obtaining-root-by-modifying-default-propro-secure 或http://bclary.com/blog/2014/04/14/splitting-and-packing-android-boot-images/
最后,为了完整性,正如上面的答案所说(https://stackoverflow.com/a/11992683/979369):
(7)要启用USB主机API支持,您应该添加一个名为的文件 android.hardware.usb.host.xml并包含以下行:
<permissions>
<feature name="android.hardware.usb.host"/>
</permissions>
进入文件夹
/system/etc/permissions
在该文件夹中查找名为
的文件handheld_core_hardware.xml or tablet_core_hardware.xml
并添加
<feature name="android.hardware.usb.host" />
进入部分。
(8)重启设备。 usb host api应该可以工作。
答案 3 :(得分:1)
我在MK809,Android 4.1 Jelly Bean上使用了adb,命令是:
adb remount /../../file.xml rw adb push ...
使用正常的命令i'vent权限,文件是只读的
抱歉我的英语不好:P