Android10 检测软件不识别USB设备连接 mUsbManager.getDeviceList()获取为空

--- a/device/sprd/sharkl3/common/handheld_core_hardware.xml
+++ b/device/sprd/sharkl3/common/handheld_core_hardware.xml
@@ -39,6 +39,7 @@
     <feature name="android.hardware.microphone" />
     <feature name="android.hardware.screen.portrait" />
     <feature name="android.hardware.screen.landscape" />
+    <feature name="android.hardware.usb.host"/>
 
     <!-- basic system services -->

20220608 更新客户检测工具不识别OTG鼠标连接

--- a/frameworks/base/core/java/android/hardware/usb/UsbManager.java
+++ b/frameworks/base/core/java/android/hardware/usb/UsbManager.java
@@ -46,6 +46,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.StringJoiner;
+import android.view.InputDevice; //yim
 
 /**
  * This class allows you to access the state of USB and communicate with USB devices.
@@ -422,14 +423,38 @@ public class UsbManager {
     @RequiresFeature(PackageManager.FEATURE_USB_HOST)
     public HashMap<String,UsbDevice> getDeviceList() {
         HashMap<String,UsbDevice> result = new HashMap<String,UsbDevice>();
+               Bundle bundle = new Bundle(); //yim
+                String packageName = mContext.getPackageName();
+                
+               final int[] devices = InputDevice.getDeviceIds();
+       //      Log.d(TAG, "yimyim devices.length:" + devices.length);
+        for (int i = 0; i < devices.length; i++) {
+            InputDevice device = InputDevice.getDevice(devices[i]);
+            if (device != null && !device.isVirtual() && device.isExternal()) {
+                if (device.getName().contains("Mouse") && packageName.contains("com.zalcom.usbtest")) {
+                                      
+                             result.put("/dev/bus/usb/001/002", (UsbDevice)bundle.get("/dev/bus/usb/001/002"));
+                                       
+                             return result;
+                                       
+                }
+            }
+        }
+       //      Log.d(TAG, "yimyim2222 Package:" + mContext.getPackageName());
+                       
         if (mService == null) {

获取连接Android 设备USB 设备,您可以使用 AndroidUSB 主机 API。以下是获取连接设备的步骤: 1. 获取 USB 设备管理器 ``` UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE); ``` 2. 获取连接USB 设备列表 ``` HashMap<String, UsbDevice> deviceList = usbManager.getDeviceList(); ``` 3. 获取特定的 USB 设备 ``` UsbDevice device = deviceList.get(deviceName); ``` 其中,deviceName 是您想要获取USB 设备的名称。 4. 检查 USB 设备的权限 在 Android 中,USB 设备需要获得权限才能被访问。您可以使用 UsbManager 的 hasPermission() 方法来检查 USB 设备是否已被授予权限: ``` if (!usbManager.hasPermission(device)) { // 请求权限 PendingIntent pi = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); usbManager.requestPermission(device, pi); return; } ``` 在这里,ACTION_USB_PERMISSION 是自定义的广播,用于接收 USB 设备许可的结果。 5. 获取 USB 设备的接口 ``` UsbInterface usbInterface = device.getInterface(interfaceIndex); ``` 其中,interfaceIndex 表示 USB 设备的接口索引。 6. 获取 USB 设备的端点 ``` UsbEndpoint endpoint = usbInterface.getEndpoint(endpointIndex); ``` 其中,endpointIndex 表示 USB 设备的端点索引。 现在,您就可以使用 endpoint 对 USB 设备进行读写操作了。 注意:使用 USB 主机 API 需要在 AndroidManifest.xml 文件中添加以下权限: ``` <uses-feature android:name="android.hardware.usb.host" /> <uses-permission android:name="android.permission.USB_PERMISSION" /> ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值