質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

2691閲覧

NsdManager.discoverServicesの二重起動を行わないようにしたい

komon4242

総合スコア21

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2017/11/21 01:58

編集2017/11/28 05:09

表題の件のついて質問があります。
NsdManagerを使用してDNS検索を5秒間行う機能を実装しました。
discoverServicesを実行中に再度discoverServicesを行うと

java.lang.IllegalArgumentException: listener already in use at android.net.nsd.NsdManager.resolveServiceが発生します。
discoverServicesが起動中かどうかを調べる方法を教えてください。

java

1public class DiscActivity extends Activity 2{ 3 private static final String TAG = "DiscActivity"; 4 private static final long DEFAULT_TIMEOUT = 5000; 5 6 private NsdManager mManager; 7 private NsdManager.DiscoveryListener mDiscListener = null; 8 private NsdManager.ResolveListener mFoundResListener = null; 9 private NsdManager.ResolveListener mLostResListener = null; 10 11 @Override 12 protected void onCreate(Bundle savedInstanceState) 13 { 14 super.onCreate(savedInstanceState); 15 setContentView(R.layout.activity_disc); 16 17 mContext = this; 18 mAdapter = new ServiceAdapter(); 19 20 mManager = (NsdManager) mContext.getSystemService(Context.NSD_SERVICE); 21 22 mDiscListener = new NsdManager.DiscoveryListener() 23 { 24 String mService; 25 26 @Override 27 public void onDiscoveryStarted(String serviceType) 28 { 29 Log.v(TAG, "Service started for protocol: " + serviceType); 30 } 31 32 @Override 33 public void onDiscoveryStopped(String serviceType) 34 { 35 Log.v(TAG, "Service stopped for protocol: " + serviceType); 36 } 37 38 @Override 39 public void onServiceFound(NsdServiceInfo info) 40 { 41 Log.v(TAG, "Found service: " + info.getServiceName()); 42 mManager.resolveService(info, mFoundResListener); 43 } 44 45 @Override 46 public void onServiceLost(NsdServiceInfo info) 47 { 48 Log.v(TAG, "Lost service: " + info.getServiceName()); 49 mManager.resolveService(info, mLostResListener); 50 } 51 52 @Override 53 public void onStartDiscoveryFailed(String serviceType, int err) 54 { 55 mService = serviceType; 56 Log.v(TAG, "Service failed to start for protocol: " + serviceType + ", Err: " + err); 57 } 58 59 @Override 60 public void onStopDiscoveryFailed(String serviceType, int err) 61 { 62 mService = serviceType; 63 64 Log.v(TAG, "Service failed to stop for protocol: " + serviceType + ", Err: " + err); 65 } 66 67 }; 68 69 mFoundResListener = new NsdManager.ResolveListener() 70 { 71 @Override 72 public void onServiceResolved(NsdServiceInfo info) 73 { 74 Log.v(TAG, "Resolve service complete"); 75 } 76 77 @Override 78 public void onResolveFailed(NsdServiceInfo info, int err) 79 { 80 Log.e(TAG, "Cannot resolve service " + info.getServiceName() + 81 ", Err: " + err); 82 } 83 }; 84 85 mLostResListener = new NsdManager.ResolveListener() 86 { 87 @Override 88 public void onServiceResolved(NsdServiceInfo info) 89 { 90 Log.v(TAG, "Resolve service complete"); 91 } 92 93 @Override 94 public void onResolveFailed(NsdServiceInfo info, int err) 95 { 96 Log.e(TAG, "Cannot resolve service " + info.getServiceName() + 97 ", Err: " + err); 98 } 99 }; 100 101 searchButton.setOnClickListener(new OnClickListener() 102 { 103 @Override 104 public void onClick(View v) 105 { 106 startDiscovery(); 107 } 108 }); 109 110 } 111 112 private void startDiscovery() 113 { 114 String service; 115 116 service = serviceNameEdit.getText().toString(); 117 118 mManager.discoverServices(service, NsdManager.PROTOCOL_DNS_SD, mDiscListener); 119 120 } 121 122}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

真偽値のフラグつけました。
フラグ増やしたくなかったですがこれしか無さそうですね。

投稿2017/11/21 02:39

komon4242

総合スコア21

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問