UsbDevice getProductId& getVendorID Android 5.1

时间:2017-01-27 16:18:27

标签: java android usb galaxy

我有一个与USB闪存驱动器交互的Android应用程序。它被过滤以仅与我公司的USB驱动器一起使用,并通过PID / VID过滤它们。我通过使用Android UsbDevice方法getProductId()和getVendorId()来获取PID / VID。

一个示例组合是PID:1812 VID:7055(Hex-PID:0714 VID:1B8F)

我正在测试一个Galaxy Note 4设备,并且它返回PID:37028和VID:1748用于具有PID的闪存驱动器:1812 VID:7055。

我在使用相同USB驱动器的其他几款移动设备上进行了测试,包括一些三星Galaxy手机。我之前从未遇到过这个问题,而且我不知道为什么这个特定的设备会返回这个值。任何人都可以提供任何见解吗?

- 更新 -

我现在在Droid Turbo上有相同的行为。这两个设备都运行Android 5.1.1,但它仍然没有解释错误的PID / VID。

1 个答案:

答案 0 :(得分:0)

getVendorID() getProductID()的源代码位于https://android.googlesource.com/platform/frameworks/base/+/c6f23e8521dedac7a07119031913235be3ca37c3/core/java/android/hardware/usb/UsbDevice.java中,它使用本机C代码(JNI)从内核模块获取数据(usb_storage用于大容量存储)或USB主控制器

原生函数:

private native boolean native_open(String deviceName, FileDescriptor pfd);
private native void native_close();
private native int native_get_fd();
private native boolean native_claim_interface(int interfaceID, boolean force);
private native boolean native_release_interface(int interfaceID);
private native int native_control_request(int requestType, int request, int value,
        int index, byte[] buffer, int length, int timeout);
private native int native_bulk_request(int endpoint, byte[] buffer, int length, int timeout);
private native UsbRequest native_request_wait();
private native String native_get_serial();
private static native int native_get_device_id(String name);
private static native String native_get_device_name(int id); 

也许这是在Galaxy Note 4硬件上实现的有点错误

如果它总是返回相同的 VID和PID,那么你只有一个很小/没有问题...