6

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デバイスでインテントを起動するための回避策を知っている人はいますか?

4

6 に答える 6

5

残念ながら、SamsungGalaxyTabletはUsbManagerと世界のUSBデバイスの約半分でうまく機能しないようです。Samsungのカーネルは、ストレージデバイスなどに対してインテントを起動するようですが、HIDやその他のランダムデバイス(arduino、USBセンサー、HIDデバイスなど)に対しては起動しないようです。samsungカーネルのバグのようです。興味深いことに、HIDデバイスはタブレットで動作しますが、UsbManagerでは列挙されません。私は同じ問題のいくつかのリンクを見つけました、そしてそれはカーネルパッチ(またはエイサータブレット)がこのatmを回避する唯一の方法であるように思われます。うまくいけば、サムスンは将来修正されるでしょう。カーネルを再構築することがあなたのものであり、UsbManagerを実際に機能させる必要がある場合は、カーネルパッチを適用した人へのリンクを次に示します。私はテストしていませんが、最終的にはテストする予定です。 http://forum.xda-developers.com/showthread.php?t=1233072

于 2011-09-28T17:28:33.457 に答える
1

私は同じ問題に直面していますが、1つのメソッドdeviceName()を使用できます。デバイスを列挙した後、device.getdeviceName()メソッドを使用してデバイス名を文字列に格納できます。

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

于 2012-02-13T09:24:33.700 に答える
0

SamsungはAndroidKernalからUSBAPIを削除しました

于 2011-10-02T21:33:58.250 に答える
0

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

于 2013-06-13T07:28:33.583 に答える
0

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

UsbHostManager.beginUsbDeviceAdded()「monitorUsbHostBus()でJNIから呼び出され、新しいUSBデバイスを報告します」。isBlackListed()このメソッドは、すべてのHUBとサブクラスBOOTを持つHIDを無条件に除外するプライベートメソッドを呼び出します。これが、HIDデバイスを表示しない理由である可能性があります。getDeviceList()

誰かがこれに対する回避策を持っているなら、私はこれを見て喜んでくれるかなりの数のユーザーがそこにいると思います。

于 2017-03-27T21:52:05.123 に答える
-2

ArduinoUnoをsamsunggalaxytab10P7500に正常に取り付けました。接続に問題がある場合は、タブレットが外部電源を持たないUSBデバイスの許可を拒否しているためです。5または3.3ボルトのAC/DCアダプターを使用してデバイスに外部から電力を供給してみてください。デバイスが接続されているのを見つけてインテントを起動し、電源アダプターのプラグを抜くと、デバイスが外部電源なしで動作し、タブレット自体が動作します。 USBOTGを介して電力を供給します

于 2014-12-16T04:11:00.233 に答える