Androidのメモとか

ポキオの日記です。今日も遅延してない。

AndroidのUSBホスト機能を緩く使ってみる

AndroidのUSBホスト機能を試す

今や死語になりつつ有るAndroid 3.1 Honeycombから対応している機能。ちょっと気になったので使ってみます。

developer.android.com

When your Android-powered device is in USB host mode, it acts as the USB host, powers the bus, and enumerates connected USB devices. USB host mode is supported in Android 3.1 and higher.

まずはAndroidManifestから実装

USBホスト機能を使うには、何はともあれuses-featureでUSBホストを使うことを宣言しておきます。

<uses-feature android:name="android.hardware.usb.host" />

USBホストでデバイスが接続されたことを検知してActivityを起動できるIntentFilterもありますが、今回は使わないので何もしません。

If you want your application to be notified of an attached USB device, specify an <intent-filter> and <meta-data> element pair for the android.hardware.usb.action.USB_DEVICE_ATTACHED intent in your main activity. The <meta-data> element points to an external XML resource file that declares identifying information about the device that you want to detect.

次にJavaの実装

UsbManagerインスタンスを生成して、そこからUsbDeviceクラスで表現される接続されているUSBデバイス情報を取得します。

適当に結果表示用のTextViewUsbManagerを宣言しておいて、

private TextView mTextView;
private UsbManager mUsbManager;

Context#getSystemService()UsbManagerインスタンスを持ってきます。

mUsbManager = (UsbManager) getSystemService(USB_SERVICE);

UsbManager#getDeviceList()で接続されているデバイスのリストを取得して、その結果をそのままTextViewに出力してみます。

mTextView = (TextView) findViewById(R.id.textview);
HashMap<String, UsbDevice> deviceList= mUsbManager.getDeviceList();

if(deviceList == null || deviceList.isEmpty()){
    mTextView.setText("no device found");
}else{
    String string = "";

    for(String name : deviceList.keySet()){
        string += name + "\n";
    }

    mTextView.setText(string);
}

いざ起動

普通に何もアプリを起動すると・・・

USBMANAGER

まぁ、想定通りです。 スマホにUSBリーダライタを繋いでみます。

USBMANAGER

ELECOM メモリカードリーダー/ライター スマホ・タブレット用 microBケーブル SD+microSD ブラック MRS-MB06BK

すると、こんな感じに表示されます。

USBMANAGER

通信はできていないもの、アプリ上で接続されたデバイスを認識することはできました。まずはここまで。

「Androidのメモとか」は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。

このブログは個人的なメモ書きであったり、考えを書く場所であります。執筆者の所属する団体や企業のコメントや意向とは無関係であります。また、このブログは必ずしも正しいことが書かれているとは限らず、誤字脱字や意図せず誤った情報を載せる場合がありえます。それが原因で読者が不利益を被ったとしても、執筆者はいかなる責任も負いません。ありがとうございます。