Требуется ли в дополнительном режиме устройство в режиме 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 есть возможность изменить это поведение, как описано здесь.

Другие вопросы по тегам