Требуется ли в дополнительном режиме устройство в режиме MTP?
Я пытаюсь написать приложение для Windows, которое будет выступать в качестве хоста для устройств Android с использованием libusb и протокола Android Open Accessory.
Тем не менее, я обнаружил, что не могу даже инициировать рукопожатие с телефоном, если он уже не находится в режиме MTP (я тестирую против Pixel XL, который возвращается в "режим зарядки" каждый раз, когда вы отключаете его),
Я не могу найти ответы в Интернете, поэтому я решил спросить здесь. Как я могу подключиться к телефону без необходимости каждый раз вручную переводить его в режим MTP?
Код Windows libusb ниже:
std::vector<AndroidDevice> devices;
libusb_device *** listptr = new libusb_device **;
libusb_device ** list;
libusb_init(NULL);
int deviceCount = libusb_get_device_list(NULL, listptr);
list = *listptr;
delete listptr;
for (int i = 0; i < deviceCount; i++) {
libusb_device * device = list[i];
libusb_device_descriptor desc;
int result = libusb_get_device_descriptor(device, &desc);
if (desc.idVendor == GOOGLE_VENDOR_ID) {
libusb_device_handle ** handleptr = new libusb_device_handle *;
result = libusb_open(device, handleptr); //Returns "not supported" error unless phone is in MTP
libusb_device_handle * handle = *handleptr;
delete handleptr;
if (!result) {
devices.emplace_back(device, handle);
}
else {
printf("Error opening device: %s\n", errorDescription(result).c_str());
}
}
1 ответ
Насколько я помню, это функция безопасности Android, поэтому устройство не будет подключаться к хосту, пока пользователь не прикажет это сделать. При выборе этой опции на устройстве Android измените конфигурацию драйвера USB-гаджета, что позволит подключаться.
В опциях разработчика Android есть возможность изменить это поведение, как описано здесь.