Android设备支持otg功能,把Android手机当成Host通过otg转接线连接usb设备(u盘,usb转串口设备)
Android Host模式在Android3.1以上就直接支持了
1.Android系统端
1)确定内核驱动是否支持usb host
查看system/lib/目录下是否有libusbhost.so
system/lib/libusbhost.so
2)配置文件
是否有配置文件
$ cat /system/etc/permissions/android.hardware.usb.host.xml
<permissions>
<feature name="android.hardware.usb.host" />
</permissions>
$ cat android.hardware.usb.accessory.xml
<permissions>
<feature name="android.hardware.usb.accessory" />
<library name="com.android.future.usb.accessory"
file="/system/framework/com.android.future.usb.accessory.jar" />
</permissions>
在/system/etc/permissions下的handheld_core_hardware.xml或者tablet_core_hardware.xml文件的段中添加
<permissions>
<feature name="android.hardware.usb.host" />
</permissions>
2.Android 应用端
添加 标签申明应用将使用 android.hardware.usb.host特性
<uses-feature android:name="android.hardware.usb.host" />
在<activity中增加android.hardware.usb.action.USB_DEVICE_ATTACHED
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
<meta-data
android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />
</activity>
device_filter只是一个过滤设备的文件,里面有usb id号,当有相应id的设备设别到应用就会弹出
检测到usb设备
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 0x0403 / 0x6001: FTDI FT232R UART -->
<usb-device vendor-id="1027" product-id="24577" />
<!-- 0x0403 / 0x6015: FTDI FT231X -->
<usb-device vendor-id="1027" product-id="24597" />
<!-- 0x10C4 / 0xEA60: CP210x UART Bridge -->
<usb-device vendor-id="4292" product-id="60000" />
</resources>
2)应用程序申请权限
当识别到usb从设备后,apk会弹出”xx应用访问usb设备”这里一定要选择
接收,进行授权处理,如果不接受不能进行usb通信,需要在代码中进行申请
private static final String ACTION_USB_PERMISSION = "com.bshui.androidserial.USB_PERMISSION";
private PendingIntent mPermissionIntent;
mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
//注册USB设备权限管理广播
IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
registerReceiver(usbReceiver, filter);
private final BroadcastReceiver usbReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (ACTION_USB_PERMISSION.equals(action)) {
synchronized (this) {
UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
if (device != null) {
}
} else {
showTmsg("用户不允许USB访问设备,程序退出!");
finish();
}
}
}
}
};