Android中的USB设备连接

时间:2017-02-04 13:21:05

标签: android usb apk

在我的Android项目中,我需要在检测到具有特定Vendorid和Productid的USB设备时自动打开应用程序。在我连接USB设备时第一次正常工作。但是,当我拔下并再次插入时,应用程序没有重新启动。我不知道是什么问题。我的清单代码是

 <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <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" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

        <meta-data
            android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
            android:resource="@xml/device_filter" />

        <intent-filter>
            <action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />
        </intent-filter>
    </activity>   

1 个答案:

答案 0 :(得分:0)

Android具有USB附件API (android.hardware.usb),您可以在其中将任何USB设备与android设备连接或分离并添加

进行显示,并将此意图过滤器过滤为

<intent-filter>
       <action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" /> 
</intent-filter>

清单中的活动

UsbManager mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);

由此您可以获取USB的系统服务

UsbAccessory[] accessories = mUsbManager.getAccessoryList();

您将获得当前连接的USB附件的列表。它会报告其制造商和型号名称,配件的版本以及该设备的用户可见的配件说明。

HashMap<String,UsbDevice> result= mUsbManager.getDeviceList()

返回一个HashMap,其中包含当前连接的所有USB设备。 USB设备名称是返回的HashMap的密钥。 UsbDevice包含制造商和型号名称,版本等。

将广播接收器添加到活动中。该接收器监视用户授予使用附件的权限的事件。如果用户选中了始终允许,则将在附件之后生成该消息,而无需进一步的用户交互。

IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
    filter.addAction(UsbManager.ACTION_USB_ACCESSORY_DETACHED);
    registerReceiver(mUsbReceiver, filter);

private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (ACTION_USB_PERMISSION.equals(action)) {
            synchronized (this) {
                UsbAccessory accessory = (UsbAccessory) intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
                if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
                    openAccessory(accessory);
                } else {
                    Log.d(TAG, "permission denied for accessory "+ accessory);
                }
                mPermissionRequestPending = false;
            }
        } else if (UsbManager.ACTION_USB_ACCESSORY_DETACHED.equals(action)) {
            UsbAccessory accessory = (UsbAccessory) intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
            if (accessory != null && accessory.equals(mAccessory)) {
                closeAccessory();
            }
        }
    }
};

有关详细说明,请阅读Android Developer