SamsungGalaxyTabletのUSBホスト機能を活用しようとしています。アタッチメントドングルをsamsung(http://www.samsung.com/us/mobile/galaxy-tab-accessories/EPL-1PL0BEGSTA)から購入しました。このドングルを介して最初にUSBデバイスを接続したとき、Galaxy Tabletから高電力エラーが発生しました。FYIは外部電源のUSBハブを使用しており、これをバイパスできます。
デバイスを接続すると、デバイス自体がUSB周辺機器の存在を認識しているので、Androidのandroid.hardware.usb.UsbDeviceを使用しようとしました。android.hardware.usb.UsbManagerをインポートします。図書館。USBデバイスを認識する方法は2つあり、ブロードキャストレシーバーを登録してインテントをリッスンする方法があることを確認しました。
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);
これは、デバイスを接続したときにインテントを起動していません、奇妙な...わかりました。そこで、次の方法を試しました。UsbManagerを介してデバイスリストを明示的に照会します。これは次のように実行されました。
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);
}
これはおそらく、現在接続されている1つの(Googleドキュメントごとに現在サポートされているUSBデバイスは1つだけ)USBデバイスを取得します。これをテストするには、ボタンをクリックして上記のコードを呼び出し、デバイスの結果を表示します。何らかの理由で、USBドングルが接続されているかどうかに関係なく、毎回デバイスリストからデバイスを取得しています。さらに、デバイスはUSBドングル(またはその欠如)に関係なく毎回同じです。出力は次のとおりです。
デバイスusbDevice[mName= / dev / bus / usb / 001/002、mVendorId = 1256、mProductId = 27033、mClass = 0、mSubClass = 0、mProtocol = 0、mInterfaces = [Landroid.os.Parcelable; @ 406ff4d8]
^^ @ 406ff4d8の値は、このコードをクエリするたびに変更されます(1つのインスタンスを作成するだけです)
私はいたるところを検索しましたが、私の状況に当てはまる可能性のある同様の問題や解決策を見つけることができませんでした。私はグーグルのUSBの例を実装しようとしました(これは私が本質的に持っているものです、私はそれらをリッピングしました)そしてこれらの問題に遭遇しています。
マニフェストの構成についても言及する必要があります。
<?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>
およびデバイスフィルター:
(デバイスフィルターの基準を削除しましたが、探しているデバイスに関する特定の情報を挿入しようとしました...どちらも役に立ちませんでした。)
この問題に関する助けをいただければ幸いです。
別の更新:私が不満を言ったデバイスは常にデバイスリストに列挙されています
デバイスusbDevice[mName= / dev / bus / usb / 001/002、mVendorId = 1256、mProductId = 27033、mClass = 0、mSubClass = 0、mProtocol = 0、mInterfaces = [Landroid.os.Parcelable; @ 406ff4d8]
アンドロイド側のUSBポートか何かである必要があります...コードにさまざまなデバイスを接続し始めて、(このリンクと同様に: USB_DEVICE_ATTACHEDインテントが起動しない)HIDデバイス、arduinoデバイス..そして悲しいことに... USBデバイスがインテントを起動したり、USBハブによって列挙されたりしていないようです。USBフラッシュドライブを試してみましたが、それを列挙して機能しました...ただし、リストの2番目のデバイスとして表示されます。最初のデバイスは上記のusbDeviceです。しかし、意図はそれで発火します。
一部のAndroidが現在実行しているように見えることを除いて、HIDデバイスやその他のUSBデバイスでインテントを起動するための回避策を知っている人はいますか?