ゆれくるコール開発日誌

ゆれくるコール、あめふるコール、つながるコールや緊急地震速報のことなど

Clingを使ってAndroidでUPnP

AndroidからUPnP対応端末をサーチして、特定端末のIPアドレスを取得したい。

 

最初はUDPソケットでM-SEARCHマルチキャスト送信というやり方で実現を試みるも、うまくいかない。。

マルチキャスト送信はできてるっぽいんだけど、受信がうまくいかないんだよな~。

 (←あとでわかったけど、エミュレータの場合はUDPマルチキャストが未サポートなのでそれが原因だったのかも)

 

というわけでアプローチをかえて、ライブラリを探してみることに。

Clingというライブラリがありました。

ライセンスはStable版の1.xはLGPLで、テスト版の2.xはLGPLかCDDLを選べます。

 

Clingはドキュメントが充実しているので、上記のやりたいことであればCling Core User Manual Chapter5 Cling and Androidを読んだり、サンプルコードを読めば実現できちゃうと思いますが、日本語の情報はあんまりないみたいなので、簡単にまとめておきたいと思います。

 

0.概要

ClingはAndroid上で動作する場合、UPnP周りの処理はサービスとして動作します。

そのサービスにActivityからbindし、必要な処理を行うというのが動作のイメージになります。

 

1.ライブラリ本体の取得・設定

コチラからライブラリ本体をDLします。

自分は「cling-distribution-1.0.5.zip」というやつをDLしました。

zipファイルを展開すると、coreフォルダの中にcling-core-1.0.5.jarとteleal-common-1.0.13.jarがあるのでそれをAndroidプロジェクトのlibsフォルダに格納し、ビルドパスを通しておきます。

cling-core-1.0.5.jarだけでは動かないので注意。

 

2.manifestの編集

Cling Core User Manual 5.1. Configuring the application serviceを参考に、manifestにパーミッションとサービスの定義を追加します。(←自分はパーミッションの追加をわすれ、ちょっとハマった。。)

 

3.Activityの編集

処理を行いたいActivityに、Cling Core User Manual 5.2. Accessing the service from an activityを参考に、サービスのbind/unbind、serviceConnection、Clingサービスの処理結果を受け取るlistenerを記述します。

 

非常にざっくりですが、こんな感じでやれば動作すると思います。

あと注意としては、さっきも少し触れたけど、エミュレータUDPマルチキャストが未サポートなため、動作しないようです。(←User Manualにもかいてある)

 

ところでUPnPjavaライブラリとしては、CyberLink for Javaの方が有名なんですかね?