首页 > 解决方案 > 即使有权限,USB opendevice 也会失败 - HostAPI 受到限制

问题描述

我正在尝试使用 Android USB Host API 连接 Android 和 Arduino UNO。我使用intent-filter. 我获得了适当的UsbInterfaceand UsbEndpoint。一切似乎都很好,直到我尝试打开,尽管授予了权限UsbDeviceConnection,它总是失败。什么原因?

片段如下:

       @Override
       protected void onResume() {
           super.onResume();
           usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
           Intent intent = getIntent();
           String action = intent.getAction();
           if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
               device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
           }
       }

       public boolean connect(UsbDevice device){

       [...] // search for appropriate interfaces/endpoints

       Log.i(TAG, "usbInEndpoint = " + usbInEndpoint.toString());
       Log.i(TAG, "usbOutEndpoint = " + usbOutEndpoint.toString());
       Log.i(TAG, "usbInterface = " + usbInterface.toString());
       Log.i(TAG, "permission = " + usbManager.hasPermission(device));

       usbDeviceConnection = usbManager.openDevice(device); 
       Log.i(TAG, "usbDeviceConnection = " + usbDeviceConnection));

       [...]

       }

Logcat 摘录如下:

usbInEndpoint = UsbEndpoint[mAddress=131,mAttributes=2,mMaxPacketSize=64,mInterval=1]
usbOutEndpoint = UsbEndpoint[mAddress=4,mAttributes=2,mMaxPacketSize=64,mInterval=1]
usbInterface = UsbInterface[mId=1,mAlternateSetting=0,mName=null,mClass=10,mSubclass=0,mProtocol=0,mEndpoints=[
    UsbEndpoint[mAddress=4,mAttributes=2,mMaxPacketSize=64,mInterval=1]
    UsbEndpoint[mAddress=131,mAttributes=2,mMaxPacketSize=64,mInterval=1]]
permission = true

D/UsbService: openDevice(/dev/bus/usb/001/002) : HostAPI is restricted

usbDeviceConnection = null

编辑

我编辑了问题和 Logcat 提取,因为在我调用 opendevice 后我注意到 UsbService 记录“主机 API 受到限制”,所以我猜这是一种设备安全设置。如何检查?我用的是三星 A8

标签: androidarduinousb

解决方案


我回答了我自己的问题,希望这对其他有同样问题的人有所帮助。这是因为我的手机是由 MDM 管理的。


推荐阅读