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?