Android usb Host

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();
                    }
                }
            }
        }
    };

这里写图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章