Androidネイティブサービスディスカバリを使用してアプリケーションを実行しようとしていますが、アプリケーションを実行するときにネットワークからすべてのサービスが検出されないことがあります。私はhttps://github.com/joeluchoa/nsdのコードを4つの銀河系のネクサスを使って走らせていますが、それぞれが同時に異なる数のサービスを発見しています。Android NSDがすべてのサービスを検出しない
基本的に私はServerSocketを持つサービスを実行します。私はNsdManagerからメソッドdiscoverServicesを使用するサービスを発見するために
NsdServiceInfo serviceInfo = new NsdServiceInfo();
serviceInfo.setServiceName(Build.SERIAL + "-" + new Date().getTime());
serviceInfo.setServiceType(SERVICE_TYPE);
serviceInfo.setPort(port);
mNsdManager.registerService(serviceInfo, NsdManager.PROTOCOL_DNS_SD,
mRegistrationListener);
:
ServerSocket server = new ServerSocket(0);
Log.i(TAG, "IP " + server.getInetAddress()
+ ", running on port " + server.getLocalPort());
Intent intent = new Intent(MySocket.this,
MyPresence.class);
intent.putExtra("PORT", server.getLocalPort());
startService(intent);
は、それから私は、NsdManagerからメソッドregisterServiceを使用して、それを公開します:
mNsdManager.discoverServices(SERVICE_TYPE, NsdManager.PROTOCOL_DNS_SD,
mDiscoveryListener);
mDiscoveryListenerを次のように使用します。
mDiscoveryListener = new NsdManager.DiscoveryListener() {
@Override
public void onDiscoveryStarted(String regType) {
Log.d(TAG, "Service discovery started");
}
@Override
public void onServiceFound(NsdServiceInfo service) {
Log.d(TAG, "Service discovery success");
Log.d(TAG, String.format("%s %s %s %d",
service.getServiceName(), service.getServiceType(),
service.getHost(), service.getPort()));
if (!service.getServiceType().contains(SERVICE_TYPE)) {
Log.d(TAG,
"Unknown Service Type: " + service.getServiceType());
} else if (service.getServiceName().equals(mServiceName)) {
Log.d(TAG, "Same machine: " + mServiceName);
} else {
mNsdManager.resolveService(service, mResolveListener);
}
}
@Override
public void onServiceLost(NsdServiceInfo service) {
Log.e(TAG, "service lost" + service);
}
@Override
public void onDiscoveryStopped(String serviceType) {
Log.i(TAG, serviceType + " Discovery stopped: " + serviceType);
}
@Override
public void onStartDiscoveryFailed(String serviceType, int errorCode) {
Log.e(TAG, serviceType + " Discovery failed: Error code:"
+ errorCode);
mNsdManager.stopServiceDiscovery(this);
}
@Override
public void onStopDiscoveryFailed(String serviceType, int errorCode) {
Log.e(TAG, serviceType + " Discovery failed: Error code:"
+ errorCode);
mNsdManager.stopServiceDiscovery(this);
}
};
何か問題がありますか?誰かがこれに対する解決策または回避策を知っていますか?
をホープだから、私は「ドンあなたにはまだ答えがありませんが、私はあなたのログステートメントであなたが解決していない情報を得ようとしていることに気づいています。 –
すべての開発者は、try catchまたはすべての変数を出力してエラーを見つけるために、 –
SERVICE_TYPEのサービス(この例ではhttp Webサーバー)を検出しているだけです。 –