Я написал утилиту для Android, которая разговаривает с несколькими пользовательскими устройствами через USB, используя API android UsbHost. Это отлично работает в 4.4, но в 5.0 некоторые из устройств не имеют своих интерфейсов (getInterfaceCount() == 0).Android 5.0 Lollipop UsbDevice Отсутствующие интерфейсы
Я использовал их на Galaxy Note 3 с CM11, и они отлично работали, но поскольку эта версия CM нестабильна, я попытался перейти на CM12. Проблема возникла, и я подумал, что это может быть ошибка CM, поэтому я попробовал простую программу, которая перечисляет устройства/интерфейсы на Nexus 5 с выпуском версии 5.0, и проблема там тоже существует.
Я создал простой тест приложение с кнопкой и TextView с OnClickListener установлен как:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_usb);
Button button = (Button) findViewById(R.id.butt);
final TextView text = (TextView) findViewById(R.id.text);
final UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String string = "";
if(manager == null)
string += "no usb manager";
else {
for(UsbDevice device : manager.getDeviceList().values()) {
string += device.toString() + "\n";
string += String.format(" ifc: %d\n", device.getInterfaceCount());
}
}
text.setText(string);
}
});
}
устройство подключено к концентратору, который подключен к телефону с помощью OTG кабеля. Когда этот код запущен в 5.0, устройства перечислены, но только одно устройство в списке имеет интерфейсы (и это не всегда одно и то же устройство). Однако, если я использую оболочку в телефоне с ADB, я могу видеть все устройства и их интерфейсы с помощью «cat/sys/kernel/debug/usb/devices».
Является ли это ошибкой в android 5.0 или изменился usb api, и я что-то упустил? Я не смог найти какую-либо информацию в Интернете.
У меня такая же проблема. В моем случае, если я загружу телефон с подключенным устройством, я получаю намерение с помощью UsbDevice без интерфейсов. Если я отсоединяю и заменяю устройство, я получаю UsbDevice с правильными интерфейсами. Я дам вам знать, если я найду что-нибудь. Глядя на источник UsbDevice на grepcode, способ получения интерфейсов изменился в Lolleypop (см. Http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1 /android/hardware/usb/UsbDevice.java#UsbDevice.getInterfaceList%28%29) – Jim