调用getAccessoryList时,UsbManager返回null

时间:2016-10-19 06:02:28

标签: android

我正在开发一款应用程序,其中Android驱动的设备充当USB设备(不是USB主机)。所以我需要找到我的android设备连接的主机。这是我的代码:

btnRefresh.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //UsbAccessory[] usbAccessory = new UsbAccessory[1];
                mUsbManager = (UsbManager)getSystemService(Context.USB_SERVICE);
                usbAccessory = mUsbManager.getAccessoryList();
                List<String> accessoryListTemp= new ArrayList<String>();

                if (usbAccessory != null) {
                    if (usbAccessory.length > 0) {
                        String hhhh = usbAccessory[0].getModel();
                        accessoryListTemp.add(hhhh);
                    }
                }
                //accessoryListTemp.add("hamed test item");
                ArrayAdapter<String> arrayAdapterTemp = new ArrayAdapter<String>(getApplicationContext(),
                       android.R.layout.simple_spinner_item, accessoryListTemp);
                arrayAdapterTemp.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

                spinnerHosts.setAdapter(arrayAdapterTemp);
            }
        });

我无法弄清楚为什么我在accessoryListTemp变量中得到null。这可能意味着找不到设备,但实际上我的设备已连接而另一台设备已找到它。 具体来说,我通过USB连接两部Android手机,其中一部是主机,另一部分是设备,但设备无法识别主机。

1 个答案:

答案 0 :(得分:0)

警告:你应该使用正确的OTG线!! 在uses-feature

中检查android.hardware.usb.accessory
<manifest ...>
<uses-feature android:name="android.hardware.usb.accessory" />

<uses-sdk android:minSdkVersion="<version>" />
...
<application>
  <uses-library android:name="com.android.future.usb.accessory" />
    <activity ...>
        ...
        <intent-filter>
            <action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" />
        </intent-filter>

        <meta-data android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
            android:resource="@xml/accessory_filter" />
    </activity>
</application>