Android Wearから音声入力でツイートできるTwitterクライアントをTwitter4jで作っているんだけど、Android Wearから直接はHTTPリクエストできなかった。

エミュレータからだとホスト名が解決できないし

Unable to resolve host “api.twitter.com”: No address associated with hostname


実機(Moto360)からだとホスト名は解決できてるけど接続ができない。

failed to connect to api.twitter.com/199.16.158.169 (port 443) after 20000ms


Twitter4jじゃなくて普通にHttpURLConnectionを使って他のサーバーにリクエストしても同じ結果になる。


調べてもコレぐらいしか困ってる人がいない。全員Wearから他のサーバーへは接続できなくて未解決
Does Android Wear support HttpURLConnection – getting EOFException – Stack Overflow


ドキュメントにはネットワーク使えないって書いてないけど、無理なものは無理なので次は設計時に気をつける
Creating Wearable Apps | Android Developers

Wearable apps can access much of the standard Android APIs, but don’t support the following APIs:
android.webkit
android.print
android.app.backup
android.appwidget
android.hardware.usb



解決方法

スマホ側をproxyにするしかない。

もともとWearからsendMessageしてスマホ側のWearableListenerServiceで受け取ってtweetを中継していたので、その設計に戻した。
Android Wearからスマホ本体側にメッセージを送る