2017/01/06

[android]paho mqttを使いたい (1)

以前、paho.mqttをpythonで使った。
あれは使いやすかったので、今度はそれをAndroidでも使いたい。

paho.android.service

githubにあるのだが、なんか使い方がpythonのときよりも面倒そうだ。
まあ、Androidのルールにあわせないといけないので仕方ないのだが。。。


今回は、こういう構成で試す。

  • 本体:Nexus5 + Android 6.0.1
  • Android Studio 2.2.3 (Windows 10 Home 64bit)
  • API 22(Android 5.1)

まず、Android StudioでEmptyな画面のプロジェクトを作った。

次はライブラリの追加なのだが、何だかよくわからない。。。
Android Studioの「File > Project Structure...」で、左からappを選び、タブの「Dependencies」をクリック。
右上のプラスアイコンをクリックし、1番のLibrary Dependencyを選択。
検索できるので「paho.client」と入力し、虫眼鏡をクリック。
いくつか候補が出てくるので「paho.client.mqttv3」を選択してOKする(testやrepositoryが付いていないやつ)。
同じようにして「paho.android.service」を追加する。

ただ、これだとgithubに書いてある最新バージョンが出てこなかった。
PropertiesタブのLibrary Repositoryにpaho-releasesのURLを書いて検索しても、出てこない(paho.android.service:1.0.2が出てくる)。

image

が、1.0.2を1.1.0に書き換えてOKすると、追加してくれた。
Library Repositoryに記載する前はできなかったので、そういうものなのだろう。
(mqttv3は1.1.0だったので、今だけの話かもしれん。)

image

この状態でビルドして実機に焼くと、警告がたくさん出るもののビルドは成功して動いた。
「Ignoring InnerClasses attribute for an anonymous inner class」などと出てくる。
ProGuard関連のようだが、今はアプリに何もやっていないし、無視しておこう。


あとは、サンプルをまねしていけばよいのか?

 

AndroidManifest.xml

<application>にserviceタグを追加するのはわかるが、<uses-permission>はこんなにいるのだろうか?
ACCESS_NETWORK_STATEとINTERNETはなんとなくいりそうな気がするが、他はアプリの内容次第ではなかろうか。
まあ、<uses-permission>は動かなかったら追加することにしよう。

 

PahoExampleActivity.java

これをまねして、adadHistory()みたいなものは、Log.d()で出力させることにした。
importできていないものは、Alt+Enterでお任せすると、動きそうなコードができた。
publishは面倒なので、まずはsubscribeだけ試そう。

 

これで起動すると、WAKE_LOCKが無いということでアプリが起動できなかった。
追加すると、次はACCESS_NETWORK_STATE。
その2つを追加するとエラーは出なくなったものの、MQTT brokerとの接続に失敗している。。。

なんとなくINTERNETも追加すると、今度は接続できた!
警告も出ずにうまく行かないのは、API 22でやっているからだろうか?

 

ともかく、subscribeまでしているので、ソースをgithubに上げておこう。
Brokerが192.168.0.70:1883になっているが、これはうちの中のVirtualBoxに立てているMosquittoだ。

github - android_paho_mqtt_test

 

次回は、publishするサンプルだ。
どうせボタンを押したら文字列を送信する、というだけになるだろうが、今日は力尽きたので次回にしよう。

 

そういえば、ProGuardの設定はうまくいかなかったら変更する、といっておきながら、変更したままになっていた。
コメントアウトしても動いているようなので、元に戻しておこう。
https://github.com/hirokuma/android_paho_mqtt_test/blob/master/app/proguard-rules.pro

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。