Android перечисляет USB-приложение

У меня есть приложение, которое использует USB-аксессуар. Приложение настроено на автоматическое обнаружение устройства с помощью фильтра намерений, когда устройство подключено, а затем запускает приложение. Мой манифест следует примеру разработки Android:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.switchpanel"
    android:versionCode="1"
    android:versionName="1.0" >

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

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.switchpanel.MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="landscape"  >

            <intent-filter>
               <action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"/>
            </intent-filter>

            <meta-data 
                android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
                android:resource="@xml/accessory_filter">
            </meta-data> 

                   </activity>
    </application>

</manifest>

Мне нужно, чтобы приложение запускалось, а затем выполнялось перечисление (подключение) к устройству ПОСЛЕ запуска приложения!

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

Не совсем уверен, как все это реализовать и как настроить манифест (какие намерения использовать).

Может ли кто-нибудь пролить свет или, что еще лучше, показать пример приложения о том, как все это настроено?


person user1895526    schedule 09.02.2013    source источник


Ответы (1)


FTDI предлагает несколько демонстрационных приложений здесь, которые показывают, как установить USB-соединение.

Надеюсь это поможет.

person TronicZomB    schedule 13.02.2013
comment
Я использую тестовую плату FTDI FT311 и демонстрационное приложение. Вот с этим мне нужна помощь. Приложение отлично работает при подключении USB-кабеля, но не может заставить его работать, когда я хочу запустить приложение с уже подключенным кабелем. - person user1895526; 14.02.2013
comment
Демонстрационные приложения FT311 запрещают вам открывать приложение самостоятельно, они запускаются только при обнаружении подключенного USB-аксессуара, а затем, когда он отсоединен, они полностью закрывают приложение. Я понял, что это был обходной путь FTDI для многих других надоедливых проблем и нюансов с перечислением USB. По этой же причине они не разрешили ротацию в своем демонстрационном приложении. В настоящее время я работаю над исправлением некоторых из этих проблем. Я знаю, что для того, чтобы разрешить вращение, вам нужно использовать android:configChanges="keyboardHidden|orientation|screenSize" в манифесте xml, а затем... - person TronicZomB; 14.02.2013
comment
... используйте @Override в своей основной деятельности и переопределите onConfigurationChanged(Configuration newConfig) {super.onConfigurationCahanged(newConfig); setContentView(R.layout.yourMainActivity); }, и это перерисует макет в новой ориентации без вызова onDestroy и onCreate, поэтому вам не нужно беспокоиться о повторном перечислении USB-устройства при повороте. - person TronicZomB; 14.02.2013
comment
Кроме того, если вы хотите иметь возможность запускать свое приложение без подключения к USB, вы можете добавить <action android:name = "android.intent.action.MAIN"/> и <category android:name = "android.intent.category.LAUNCHER"/> в свой манифест. Но это может вызвать проблемы с перечислением при определенных наборах действий с планшетом. - person TronicZomB; 14.02.2013
comment
Итак, я попытался добавить действие ACTION_USB_ACCESSORY_ATTACHED в BroadcastReceiver, и это не сработало. После долгих поисков кажется, что это действие может быть поймано ТОЛЬКО intent-filter в манифесте. Судя по это и это. - person TronicZomB; 20.02.2013
comment
Я обнаружил, что если вы создадите кнопку, которая просто вызывает OpenAccessory(accessory), используя ту же кнопку getAccessories(), что и в ResumeAccessory(), то соединение с планшетом и FT311 будет восстановлено и должно работать нормально (пока что я провел только минимальное тестирование этого метода) . - person TronicZomB; 20.02.2013