2011-09-23 21 views
6

私は、サムスンギャラクシータブレットでUSBホスト機能を活用しようとしています。私はサムスン(http://www.samsung.com/us/mobile/galaxy-tab-accessories/EPL-1PL0BEGSTA)から添付のドングルを購入しました。私が最初にこのドングルを介してUSBデバイスを接続したとき、私はギャラクシータブレットからハイパワーエラーが発生しました - 外部USBパワードUSBハブを使用して、これをバイパスすることができます。サムスンギャラクシー10.1タブレットでAndroid USBホストの問題

私はそれを接続すると、デバイス自体がUSB周辺機器の存在を認識しているので、私はAndroidのandroid.hardware.usb.UsbDeviceを使用しようとしました。 import android.hardware.usb.UsbManager;としょうかん。私は、任意のデバイスを接続したときにこれがOK ...奇妙な、任意の意図を発射されていない

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); 

を経由しての意図をリッスンするために、放送受信装置を登録するUSB​​デバイスを認識するための2つの方法が、あることを見ました。だから私は、次の方法を試しに行きました:明示的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をつかむだろう(一つだけのUSBデバイスが現在のGoogleドキュメントごとにサポート)現在接続されているUSBデバイス。これをテストするには、ボタンをクリックして上記のコードを呼び出し、デバイスの結果を表示します。何らかの理由で、USBドングルが接続されているかどうかにかかわらず、毎回デバイスリストからデバイスを取得しています。さらに、デバイスは、USBドングル(またはその欠如)に関係なく毎回同じです。次のように出力される。

デバイスusbDevice [MNAME =は/ dev /バス/ USB/001/002、mVendorId = 1256、mProductId = 27033、mClass = 0、mSubClass = 0、mProtocol = 0、mInterfaces = [Landroid .os.Parcelable; 406ff4d8]

@ ^^ @ 406ff4d8値が、私はこのコードを照会するたびに変更する(私はそれまでの単一のインスタンスを置く)

私はどこにでも検索しましたとすることができませんでした私の状況に当てはまるような類似の問題や解決策を見つける。私はGoogleの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> 

とデバイスフィルタを:


(私はデバイスフィルタに基準を削除されますが、 dについての特定の情報を挿入しようとしました私が探しているサービスです...)

この問題に関する助けがあれば幸いです!


別のアップデート:私は常にデバイスリスト

デバイスusbDevice [MNAME =は/ dev /バス/ USB/001/002に列挙されて不満デバイス、mVendorId = 1256、mProductId = 27033、 mClass = 0、mSubClass = 0、mProtocol = 0、mInterfaces = [Landroid.os.Parcelable; @ 406ff4d8]

は、Android側のUSBポートでなければなりません。私のコードにさまざまなデバイスを接続し始めたので、(このリンクに似ています: USB_DEVICE_ATTACHED Intent not firing)HIDデバイス、arduinoデバイス、そして悲しいことに...私のUSBデバイスは、インテントを起動したり、 USBハブ私はUSBフラッシュドライブを試してみましたが、それを列挙して作業しました...しかし、これはリスト上の2番目のデバイスとして表示されます。最初のものは上記のusbDeviceです。しかし、インテントはそれにもかかわらず発砲する。

選択した数少ないアンドロイドを除いて、HIDデバイスや他のUSBデバイスでインテントを発火させる回避策を知っている人はいますか?

+0

他のアプリでUSBホストが動作することを確認できますか? PTPカメラを接続して、ギャラリーがブロードキャストされているかどうかを確認してください。私はあなたがリブートを試みたと仮定し、あなたのタブを最新バージョンに更新しました。 –

+0

キーボードを差し込むと動作しているようです。私はそれを接続すると、私は "USBデバイスが接続されました"というメッセージが表示されます。しかし、上記のコードは、キーボード、他のUSBデバイス、またはプラグインされていない同じ出力を私に与えます。 USBデバイスは関係ありません。私はそれがキーボードがちょうど良いと認識されて以来、私のコードで何かでなければならないことを知っBTW:他のデバイスを接続すると「Unknown USB Device Connected」と表示される – hinklecw

+0

別のアップデート:デバイスリストに常に列挙されていると訴えたデバイスは、AndroidのUSBポートなどでなければなりません。デバイスを私のコードに追加してみると、このリンク(USB_DEVICE_ATTACHEDインテントは起動しない)と同様に、HIDデバイス、arduinoデバイス、および私のUSBデバイスは、USBハブによってインテントを起動したり、列挙されたりしません。私はUSBフラッシュドライブを試してみましたが、それを列挙して作業しました...しかし、これはリスト上の2番目のデバイスとして表示されます。最初のものは上記のusbDeviceです。しかし、インテントはそれにもかかわらず発砲する。 – hinklecw

答えて

4

SOO残念ながら、サムスンギャラクシータブレットは、UsbManagerと世界のUSBデバイスの約半分でうまく動作しないようです。サムスンのカーネルは、HIDやその他のランダムデバイス(arduino、私のUSBセンサー、HIDデバイスなど)ではなく、ストレージデバイスなどの意図を発しているようだ.Samsungカーネルのバグのようだ。興味深いことに、HIDデバイスはタブレット上で動作しますが、UsbManagerでは列挙されません。私は同じ問題のいくつかのリンクを見つけました。カーネルパッチ(またはエイサータブレット)がこの気圧の周りの唯一の方法であるようです。うまくいけば、サムスンは将来的に修正するだろう。ここでは、カーネルの再構築があなたのものであり、実際にUsbManagerを動作させる必要がある場合、カーネルパッチを行った人へのリンクです。私はテストしていませんが、最終的に計画して、私の考えにコメントを残します。 http://forum.xda-developers.com/showthread.php?t=1233072

+0

リンク先のカーネルパッチはここでは適用されません。サムスンギャラクシータブ7のためのものだが、サムスンギャラクシータブ10.1についての話は、彼がマニフェストの最小SDKとしてハニカムをターゲットにしているからだ。 –

+0

サムスンでUSBホストモードを利用するには、私はAcer Iconia 500を使用しています。何も問題なく動作します。私はSamsungにも持っていきたいです。 – user387184

0

サムスンは、デバイスを列挙した後、あなたはdevice.getdeviceNameを使用して文字列内のデバイス名を格納することができ、)私は同じ問題に直面していますが、あなたは一つの方法DEVICENAMEを(使用することができますAndroidのカーネル

1

からUSB APIを削除しました() 方法。

あなたはデバイスの完全な情報から正確なデバイス名を取得します。

0

あなたはresource/xml/device_filter.xmlで認識したいデバイスを定義するべきだと思います。 あなたはアンドロイドAPIを参照できます。

-2

私はArduino Unoを私のSamsung Galaxyタブ10 P7500に接続しました。 接続に問題がある場合は、タブレットが外部電源を持たないUSBデバイスの許可を拒否したためです。 5Vまたは3.3V AC/DCアダプタを使用してデバイスを外部から接続してください。デバイスが接続されていることがわかり、インテントを起動し、電源アダプタを抜くと、デバイスは外部電源なしで動作しますUSB OTGを介して電源を供給します

0

あなたのHIDデバイスが見えない別の(厄介な)理由があるかもしれません。

UsbHostManager.beginUsbDeviceAdded() "新しいUSBデバイスを報告するためにmonitorUsbHostBus()でJNIから呼び出されました"。このメソッドはプライベートメソッドisBlackListed()を呼び出します。プライベートメソッドは、すべてのHUBを無条件にフィルタリングし、HIDをサブクラスBOOTでフィルタリングします。 これは、HIDデバイスが表示されないときに表示される可能性があります。getDeviceList()

誰かがこれに対応する方法を知っている人は、かなりの量のユーザーがいると思います。

関連する問題