Как заставить пример ADK DemoKit работать на Google I/O Galaxy Tab 10.1?

Я пытаюсь заставить работать DemoKit на плате ADK. Кажется, что даже с обновлением 3.1 вкладка Galaxy не имеет всего, что нужно (или, по крайней мере, не работает так, как рекламируется). И даже если покопаться в документации, кажется, что приложение Samsung Kies, возможно, мешает.

Он не запустится, если я использую библиотеки API уровня 10 в соответствии с инструкциями (проходя через отладчик, я вижу это исключение: java.lang.NoClassDefFoundError: com.android.future.usb.UsbManager). То же самое происходит, если я использую библиотеки API уровня 12.

Установив целью платформу 3.1 (просто изменив ее в свойствах проекта), она не будет компилироваться (из-за использования библиотеки com.android.future.usb). Я нашел документацию по некоторым изменениям, которые вам необходимо внести чтобы использовать пакет USB на 3.1, и из этого я внес изменения в DemoKitActivity.java

37,38c37
< import com.android.future.usb.UsbAccessory;
< import com.android.future.usb.UsbManager;
---
> import android.hardware.usb.*;
128c127
< UsbAccessory accessory = UsbManager.getAccessory(intent);
---
> UsbAccessory accessory = (UsbAccessory) intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
139c138
< UsbAccessory accessory = UsbManager.getAccessory(intent);
---
> UsbAccessory accessory = (UsbAccessory) intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
152c151
< mUsbManager = UsbManager.getInstance(this);
---
> mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);

Однако даже после внесения этих изменений у меня возникли проблемы. Он устанавливается сейчас, и на начальном экране приложения DemoKit появляется сообщение «Подключите плату DemoKit», но всякий раз, когда я подключаю плату ADK и отключаю отладку по USB (с ней она ничего не делает), я просто получаю Samsung Kies приложение, которое говорит: «Нажмите клавишу «Домой», чтобы выйти из Samsung Kies, и никакие другие кнопки не реагируют. Если вы вернетесь домой и вернетесь в приложение DemoKit, просто снова появится экран подключения, и он никогда не подключается к плате.

Как заставить это работать? Работает ли ADK с Galaxy Tab 10.1 (версия Google I/O), и если да, то правильно ли я настроен?

ОБНОВИТЬ

Вот что говорит последовательный монитор Arduino, независимо от того, включен или выключен режим отладки на планшете (необходимо установить скорость передачи данных на 115200, чтобы прочитать вывод):

Устройство адресовано... Запрос дескриптора устройства.

найдено возможное устройство. переход в последовательный режим

Ошибка пакета данных: 5 не удалось прочитать версию протокола устройства

Это повторяется постоянно, пока он подключен к планшету.

ОБНОВЛЕНИЕ 2

Я понял, что не обновил файл AndroidManifest.xml... Изменение:

<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="11" />

to

<uses-sdk android:minSdkVersion="12" android:targetSdkVersion="12" />

и

<uses-library android:name="com.android.future.usb.accessory"/>

to

<uses-feature android:name="android.hardware.usb.accessory"/>

Кажется, ничего не изменилось, когда я это исправил.

ОБНОВЛЕНИЕ 3

Написал в службу поддержки Самсунг, жду ответа.


person John    schedule 15.06.2011    source источник


Ответы (4)


Приносим свои извинения, режим аксессуаров в настоящее время не работает с Samsung Galaxy Tab 10.1. Samsung знает о проблеме и работает над ее решением. Когда устройство поддерживает режим аксессуаров, вы должны иметь возможность использовать API-интерфейсы com.android.future.usb.*, которые облегчат вам написание приложения, работающего как с Android 3.1, так и с Android 2.3.4.

person cyngus    schedule 20.06.2011
comment
Пока Samsung работает над собой, ICS доступен для Tab 10.1, а режим аксессуаров работает нормально. androidcommunity.com / - person saranicole; 25.04.2012

Я только что получил новое обновление TouchWiz, и теперь Arduino считывает это обратно в последовательный порт:

Device addressed... Requesting device descriptor.found possible device. swithcing to serial mode
device supports protcol 1

Device addressed... Requesting device descriptor.found android acessory device
config desc
interface desc
inEp: 1
outEp: 2

Это выглядит намного лучше. Galaxy Tab просит запустить DemoKit, я нажимаю «ОК», и он принудительно завершает работу. Это лучше, чем было раньше.

Я обновлю, если я заставлю его работать полностью.

person idreamincode    schedule 10.08.2011
comment
И у меня теперь все работает! Ууууу! Обновление творило чудеса. Общение с Arduino ADK (Freeduino) - person idreamincode; 10.08.2011
comment
Не могли бы вы перечислить, как вы сделали обновление на вкладке Samsung Galaxy 10.1? Это обычное обновление системы? - person TheCottonSilk; 05.01.2012

Вы уверены, что используете правильную цель сборки? Вместо обычных «Android 2.3.3» (уровень 10) или «Android 3.1» (уровень 12) следует использовать цели «API Google». Если вы запустите «Android SDK и AVD Manager», вы можете найти их в разделе «Доступные пакеты» > «Сторонние надстройки» > «Google Inc.» > «API Google от Google Inc., Android API 10» (или 12).

person girtsf    schedule 19.06.2011
comment
Ага. Пробовал установить цель для всех из них. API уровня 10, API уровня 12, а затем изменение вещей и использование платформы 3.1 в качестве цели сборки. Ни один из них не работает. - person John; 19.06.2011

Мой Galaxy Tab 10.1 на Android 3.1 также не имел API аксессуаров в качестве резервной копии. Поэтому я также получил следующее исключение:

java.lang.NoClassDefFoundError: com.android.future.usb.UsbManager

Один из способов заставить его работать на Tab 10.1 с Android 3.1 — использовать обычный API аксессуаров. Не бэкпортированная версия. Вы можете установить целевой SDK для проектов DemoKit на обычный уровень API 12 (Android 3.1).

Кроме того, вы должны изменить фрагменты кода в DemoKitActivity, чтобы получить UsbManager и UsbAccesory:

UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
UsbAccessory accessory = (UsbAccessory) intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);

импорт меняется на:

import android.hardware.usb.UsbAccessory;
import android.hardware.usb.UsbManager;

Манифест Android по-прежнему может содержать следующую запись, но она больше не требуется:

<uses-library android:name="com.android.future.usb.accessory" />
person Moritz    schedule 06.01.2012