算譜王におれはなる!!!!

偏りはあると思うけど情報技術全般についてマイペースに書くよ。

Android端末-PC間 USBケーブルによる通信

当エントリはAndroid Advent Calendar 2012 (表)の6日目のエントリです。

 エントリ・タイトルのように、Android端末とPCをUSBケーブルで繋ぎ、それを使った通信を実現する方法についてお話しさせていただきます。

いい感じのワードでぐぐってもそれらしい情報が得られないので今回このトピックについて書くことにしました。

アプローチ

肝はコマンド「adb forward」です。これによりポートフォワーディングを利用します。「adb forward tcp:9999 tcp:8888」で、PCに対するTCPポート9999番へのアクセスがAndroid端末のTCPポート8888番に転送されます。これを利用したテザリングアプリが昔流行ったような流行らなかったような...。

実装

あとは普通にプログラムを書いて行くだけです。Android側に置くサーバアプリとPC側に置くクライアントアプリを作成します。サーバ側ではクライアント側の接続と書き込みを待ち、クライアント側はサーバに接続、書き込みを行います。

ソースコードは最後にまとめて置いておきます(もう少しリファクタリング頑張ればよかった...)。このコードでは、クライアントがサーバに接続して文字列 "Hello" を送信しています。サーバはそれを受け取った後、トーストとして表示します。

実行結果

f:id:ngsw_taro:20121206203402p:plain

↑ 待機中

f:id:ngsw_taro:20121206203455p:plain

↑ メッセージを受け取りトースト表示

応用

これだけの例では面白くありませんが、USBケーブルでAndroidとPCが通信できると世界が広がります(2年くらい前はね)。前述しましたが、テザリングアプリを作ったり、Webサーバを作ったりすると面白いかも知れませんね(AndroidにJetty載っけられるらしいですが...)。

感想

Androidjava.net.ServerSocketが使えるのは驚きました。

まとめ

adb forwardでポートフォワーディングができます。AndroidをサーバにしてPCとやりとりすると何か面白いものが作れそう!?

今回の目的「ぐぐっても出て来ない事を書く」は達成できたと思います。しばらくすれば「Android PC USB 通信」とかでヒットするかも。