Pahoを使います。
必要なライブラリは二つ。
- org.eclipse.paho.client.mqttv3-1.0.x.jar
- org.eclipse.paho.android.service.jar
Pure Javaでは上のライブラリのみで動作しますが、Androidの場合サービスとして動作させる下のライブラリが必要になります。
利用するためには、AndroidManifest.xmlを変更します。
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
-
android.permission.WAKE_LOCK
Sleep時でも動作させるために、使っているみたいです。
記述しないとエラーが出ました。 -
android.permission.INTERNET
まあ外部接続するならMQTTならずとも必須でしょう
-
android.permission.WRITE_EXTERNAL_STORAGE
なぜ必要かわかりません、もしかしたら不要?
-
android.permission.ACCESS_NETWORK_STATE"
これも使いそうではありますが、どうやって使われているのかは不明
あと当然ながらServiceも追加する必要があります。
<service android:name="org.eclipse.paho.android.service.MqttService" />
あと注意するところもうひとつ。
MqttAndroidClient.connect()
これはサービスへの接続なので、非同期になります。
完了しないとpublish()などができません。publish()を呼び出してもNullPointerExceptionになってしまいます。
AndroidではonCreate(), onDestroy()あたりでconnect(), disconnect()を呼び出してやる必要がありそうですね。
具体的なソースコードはそのうち公開します。
[参考URL(ほとんどここを参考にしました)](http://minor.hatenablog.com/entry/2015/02/15/2147300)削除されてしまっていました
MyMQTTなるアプリもある
https://play.google.com/store/apps/details?id=at.tripwire.mqtt.client