Bonjour デバイス ( _http._tcp.local.
) を 5 秒ごとにスキャンし、見つかったデバイス (名前などの文字列) を含む配列リストを取得したいと考えています。サービス (およびバックグラウンド スレッド) でそれを行う必要があります。
今、私は 5 秒ごとに JmDNS の新しいインスタンスを作成しています ( JmDNS.create()
)。これにより、メモリ リークが発生します ;)。もっと良い方法があるに違いないと思いますが、わかりません... 誰が助けてくれますか?
try {
final JmDNS jm;
ArrayList<String> foundDevices = new ArrayList<String>();
jm = JmDNS.create();
jm.addServiceListener("_http._tcp.local.", listener = new ServiceListener() {
@Override
public void serviceAdded(ServiceEvent event) {
jm.requestServiceInfo(event.getType(), event.getName(), 1);
}
@Override
public void serviceRemoved(ServiceEvent event) {
}
@Override
public void serviceResolved(ServiceEvent event) {
JSONObject obj = null;
ServiceInfo info = event.getInfo();
//Log.e("TCLogging", "RAW: " + info);
String Name = info.getName();
foundDevices.add(Name);
} catch (Exception e) {
Log.e("TCLogging", "Error");
}
}
});
ServiceInfo serviceInfo = ServiceInfo.create("_http._tcp.", "TC_" + android.os.Build.MODEL, 0, "AndroidApp");
jm.registerService(serviceInfo);
} catch (Exception e) {
Log.e("TCLogging", e.toString());
}