Android 获取USB设备的类型

Version info:
Linux: 3.10
Android: 4.2

一、问题

现在有USB设备插入Android系统,那么如何得知插入的设备类型?是USB打印机,U盘,还是USB鼠标


二、USB类型规定

对于USB类型,USB组织是有规定的,见:http://www.usb.org/

比如:

Base Class

Descriptor Usage

Description

00h

Device

Use class information in the Interface Descriptors

01h

Interface

Audio 

02h

Both

Communications and CDC Control

03h

Interface

HID (Human Interface Device)

05h

Interface

  • 12
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
在Unity中获取AndroidUSB权限需要使用Android的Java层代码,可以通过Unity的AndroidJavaObject类来调用Java代码实现。以下是获取USB权限的示例代码: ```csharp private void GetUsbPermission() { AndroidJavaObject context = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity").Call<AndroidJavaObject>("getApplicationContext"); AndroidJavaObject usbManager = context.Call<AndroidJavaObject>("getSystemService", "usb"); AndroidJavaObject usbDevice = GetUsbDevice(); if (usbDevice != null) { AndroidJavaObject pendingIntent = AndroidJavaObject("android.app.PendingIntent").CallStatic<AndroidJavaObject>("getBroadcast", context, 0, new AndroidJavaObject("android.content.Intent"), 0); AndroidJavaObject intentFilter = AndroidJavaObject("android.content.IntentFilter").CallStatic<AndroidJavaObject>("create", "android.hardware.usb.action.USB_DEVICE_ATTACHED"); AndroidJavaObject broadcastReceiver = new AndroidJavaObject("android.content.BroadcastReceiver"); broadcastReceiver.Call("onReceive", context, new AndroidJavaObject("android.content.Intent")); context.Call("registerReceiver", broadcastReceiver, intentFilter); usbManager.Call("requestPermission", usbDevice, pendingIntent); } } private AndroidJavaObject GetUsbDevice() { AndroidJavaObject context = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity").Call<AndroidJavaObject>("getApplicationContext"); AndroidJavaObject usbManager = context.Call<AndroidJavaObject>("getSystemService", "usb"); AndroidJavaObject usbDevice = null; AndroidJavaObject deviceList = usbManager.Call<AndroidJavaObject>("getDeviceList"); AndroidJavaObject[] deviceArray = AndroidJNIHelper.ConvertFromJNIArray<AndroidJavaObject[]>(deviceList.GetRawObject()); foreach (AndroidJavaObject device in deviceArray) { int deviceClass = device.Call<int>("getDeviceClass"); int deviceSubClass = device.Call<int>("getDeviceSubclass"); if (deviceClass == 0x02 && deviceSubClass == 0x01) { usbDevice = device; break; } } return usbDevice; } ``` 这段代码主要包括两个方法: 1. `GetUsbDevice()`:获取连接的USB设备判断设备类型是否为USB存储设备。 2. `GetUsbPermission()`:获取USB权限,注册USB设备连接广播,请求USB权限。 需要注意的是,这段代码只是示例代码,具体的实现需要根据实际情况进行修改和优化。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值