6 Stimmen

Android Usb Host Problem mit Samsung Galaxy 10.1 Tablet

Ich versuche, die USB-Host-Funktion des Samsung Galaxy Tablet zu nutzen. Ich habe den Anschluss-Dongle von Samsung gekauft ( http://www.samsung.com/us/mobile/galaxy-tab-accessories/EPL-1PL0BEGSTA ). Als ich zum ersten Mal ein USB-Gerät über diesen Dongle angeschlossen habe, hatte ich einen High-Power-Fehler vom Galaxy Tablet - FYI verwenden Sie einen extern mit Strom versorgten USB-Hub und Sie können dies umgehen.

Da nun das Gerät selbst die Existenz eines USB-Peripheriegeräts bestätigt, wenn ich es anschließe, habe ich versucht, Android.hardware.usb.UsbDevice zu verwenden; importieren Android.hardware.usb.UsbManager; Bibliothek. Ich habe gesehen, dass es zwei Methoden gibt, um ein USB-Gerät zu erkennen: die Registrierung eines Broadcast-Empfängers, der auf die Intents über

IntentFilter usbIntentFilter = new IntentFilter();
usbIntentFilter.addAction("android.hardware.usb.action.USB_DEVICE_ATTACHED");          
usbIntentFilter.addAction("android.hardware.usb.action.USB_DEVICE_DETACHED"); 
registerReceiver(mUsbReceiver,usbIntentFilter);

Es werden keine Absichten ausgelöst, wenn ich ein Gerät anschließe, seltsam...ok. Also habe ich die nächste Methode ausprobiert: explizites Abfragen einer Geräteliste über den UsbManager - dies wurde wie folgt erreicht:

HashMap<String, UsbDevice> deviceList = manager.getDeviceList();
    int count = deviceList.size();
    Iterator<UsbDevice> iterator = deviceList.values().iterator();

    if(iterator.hasNext()){
    UsbDevice deviceVal = iterator.next();
    testTxtView1.setText("set device " + deviceVal); 
    }

Dies würde vermutlich das eine (laut Google-Dokumentation derzeit nur ein unterstütztes) USB-Gerät erfassen, das derzeit angeschlossen ist. Um dies zu testen, würde ich den obigen Code bei einem Tastenklick aufrufen und die Geräteergebnisse anzeigen. Aus irgendeinem Grund erhalte ich jedes Mal ein Gerät aus der Geräteliste, egal ob ein USB-Dongle angeschlossen ist oder nicht. Außerdem ist das Gerät jedes Mal dasselbe, unabhängig vom USB-Dongle (oder dessen Fehlen). Die Ausgabe ist wie folgt:

device usbDevice[mName=/dev/bus/usb/001/002,mVendorId=1256,mProductId=27033,mClass=0,mSubClass=0,mProtocol=0,mInterfaces=[Landroid.os.Parcelable;@406ff4d8]

^^ der Wert @406ff4d8 ändert sich jedes Mal, wenn ich diesen Code abfrage (ich habe nur eine einzige Instanz davon hochgeladen)

Ich habe überall gesucht und konnte keine ähnlichen Probleme oder Lösungen finden, die auf meine Situation zutreffen könnten. Ich habe versucht, die USB-Beispiele von Google zu implementieren (was genau das ist, was ich im Wesentlichen habe, riss ich ihre) und bin in diese Probleme laufen.

Ich sollte auch die Zusammensetzung meines Manifests erwähnen:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="edu.mit.ll.drm4000"
  android:versionCode="1"
  android:versionName="1.0">
<uses-feature android:name="android.hardware.usb.host" />
<uses-sdk android:minSdkVersion="12" />

<application android:icon="@drawable/icon" android:label="@string/app_name">

    <activity android:name=".DRM4000Activity"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

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

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

    </activity>

</application>

und Gerätefilter:

(Ich habe die Kriterien für den Gerätefilter entfernt, aber auch versucht, spezifische Informationen über das gesuchte Gerät einzugeben... beides ohne Erfolg.)

Für jede Hilfe zu diesem Problem wären wir sehr dankbar!


Ein weiteres Update: Das Gerät, über das ich mich beschwert habe, wird immer in der Geräteliste aufgeführt

device usbDevice[mName=/dev/bus/usb/001/002,mVendorId=1256,mProductId=27033,mClass=0,mSubClass=0,mProtocol=0,mInterfaces=[Landroid.os.Parcelable;@406ff4d8]

muss der USB-Anschluss auf der Android-Seite sein oder so... denn ich habe angefangen, eine Reihe verschiedener Geräte an meinen Code anzuschließen und habe festgestellt, dass (ähnlich wie bei diesem Link: USB_DEVICE_ATTACHED Absicht, nicht zu feuern ) HID-Geräte, Arduino-Geräte... und leider... scheint mein USB-Gerät keine Absicht auszulösen oder vom USB-Hub aufgezählt zu werden. Ich habe es mit einem USB-Flash-Laufwerk versucht, und es hat funktioniert... allerdings wird es als ZWEITES Gerät in der Liste angezeigt, das erste ist das oben aufgeführte, allgegenwärtige usbDevice. Intents tun Feuer mit ihm aber.

Kennt jemand einen Workaround, um Intents mit HID-Geräten und anderen USB-Geräten zu aktivieren, außer den wenigen, die Android jetzt zu tun scheint?

5voto

hinklecw Punkte 356

SOO leider sieht es so aus, als ob das Samsung Galaxy Tablet einfach nicht gut mit dem UsbManager und etwa der Hälfte der USB-Geräte in der Welt spielen. Der Kernel in Samsung scheint Intents für Speichergeräte und dergleichen zu feuern, aber nicht für HID und andere zufällige Geräte (wie Arduino, und mein USB-Sensor, und HID-Geräte als auch. Interessanterweise funktionieren die HID-Geräte auf dem Tablet, werden aber nicht im UsbManager aufgeführt. Ich habe mehrere Links des gleichen Problems gefunden, und es scheint, wie ein Kernel-Patch (oder das Acer-Tablet) sind die einzigen Möglichkeiten, um dieses atm. hoffentlich Samsung wird in der Zukunft zu beheben. Hier ist ein Link zu einem Kerl, der einen Kernel-Patch gemacht hat, falls Sie den Kernel neu aufbauen wollen und Sie UsbManager wirklich zum Laufen bringen müssen. Ich habe nicht getestet, aber planen, schließlich, und wird einen Kommentar über meine Gedanken zu verlassen. http://forum.xda-developers.com/showthread.php?t=1233072

1voto

maanbhati Punkte 103

Ich stehe vor dem gleichen Problem, aber Sie können eine Methode deviceName() verwenden, nach Aufzählung Gerät können Sie Gerätenamen in einer Zeichenfolge mit device.getdeviceName() Methode speichern.

erhalten Sie neben den vollständigen Informationen zum Gerät auch den genauen Gerätenamen.

0voto

Justus Punkte 1

Samsung hat die USB-API aus dem Android-Kernal entfernt

0voto

vivi.vi Punkte 11

Ich denke, Sie sollten das Gerät, das Sie erkennen wollen, in resource/xml/device_filter.xml definieren. Sie können sich auf die Android-Api beziehen.

0voto

M Webjorn Punkte 43

Es kann einen anderen (unangenehmen) Grund geben, warum Sie Ihr HID-Gerät nicht sehen können.

UsbHostManager.beginUsbDeviceAdded() "Wird von JNI in monitorUsbHostBus() aufgerufen, um neue USB-Geräte zu melden". Diese Methode ruft eine private Methode isBlackListed() die bedingungslos alle HUBs und HIDs mit der Unterklasse BOOT herausfiltert. Dies kann der Grund sein, warum Sie keine HID-Geräte sehen, wenn Sie eine getDeviceList()

Wenn jemand eine Lösung für dieses Problem hat, denke ich, dass es eine ganze Reihe von Nutzern gibt, die dies gerne sehen würden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X