Как я могу получить пример ADK DemoKit, работающий на вкладке Google I/O Galaxy Tab 10.1?
Я пытаюсь заставить пример DemoKit работать на плате ADK. Кажется, что даже с обновлением 3.1 Galaxy Tab не имеет всего, что ему нужно (или, по крайней мере, не работает так, как рекламируется). И даже с копанием документации кажется, что приложение 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 edition) и если да, то я на правильном пути?
ОБНОВИТЬ
Вот что говорит последовательный монитор Arduino, независимо от того, включен ли режим отладки на планшете (для считывания выходных данных необходимо установить скорость передачи 115200):
Устройство адресовано... Запрос дескриптора устройства.
найдено возможное устройство. переход в последовательный режим
Ошибка пакета данных: 5 не удалось прочитать версию протокола устройства
Он постоянно повторяется, пока он подключен к планшету.
ОБНОВЛЕНИЕ 2
Я понял, что я не обновлял AndroidManifest.xml
файл... Изменение:
<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="11" />
в
<uses-sdk android:minSdkVersion="12" android:targetSdkVersion="12" />
а также
<uses-library android:name="com.android.future.usb.accessory"/>
в
<uses-feature android:name="android.hardware.usb.accessory"/>
Кажется, ничего не изменилось, как только я исправил это.
ОБНОВЛЕНИЕ 3
Я отправил письмо в службу поддержки Samsung и жду ответа.
4 ответа
Приношу свои извинения, режим аксессуаров в настоящее время не работает с Samsung Galaxy Tab 10.1. Samsung знает об этой проблеме и работает над ее решением. Когда устройство поддерживает режим аксессуаров, вы сможете использовать API-интерфейсы com.android.future.usb. *, Которые облегчат вам написание приложения, которое работает как с Android 3.1, так и с 2.3.4.
Я только что получил новое обновление 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, я нажму OK, и он принудительно завершает работу. Это лучше, чем было раньше.
Я буду обновлять, если я получу это работает полностью.
Вы уверены, что используете правильную цель сборки? Вместо обычных "Android 2.3.3" (уровень 10) или "Android 3.1" (уровень 12) следует использовать цели "API Google". Если вы запускаете "Android SDK и AVD Manager", вы можете найти их в разделе "Доступные пакеты"> "Надстройки третьих сторон"> "Google Inc"> "Google API от Google Inc., Android API 10" (или 12).
Моя 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" />