0

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());
      }
4

2 に答える 2

0

JmDNS について私が知らなかったのは、デバイスがネットワークで発見または消失したときに通知されるということでした。N 秒ごとにスキャンして、ネットワーク内にあるデバイスを確認したいと考えていました。ただし、デバイスの変更が通知されるまで待つ方がはるかに簡単です (そしてリソースの消費も少なくなります)。

受け入れられた答えは、N秒ごとにスキャンを達成するのに役立ちましたが、それを行うための最も理想的な方法ではありません!

于 2015-03-19T18:36:58.740 に答える