У меня возникла проблема, связанная с обнаружением сетевых служб.
Когда я запускаю приложение с подключенным Wi-Fi, NSD работает полностью нормально, обнаруживая службу и плавно решая их.Но проблема возникает, когда мы подключаем Wi-Fi, после отключения Wi-Fi или переключения Wi-Fi из режима полета.
Он просто застревает на DiscoveryStarted
и никогда не переходит оттуда, хотя он устанавливает соединение с маршрутизатором Wi-Fi после выключения режима полета.
В коде я также гарантировал, что обнаружениебудет запускаться только тогда, когда соединение Wi-Fi обеспечено, но не повезло.
Сейчас мне нужно убить приложение, чтобы NSD работал правильно.
Я использую NSD Helper из Google Gist:
https://android.googlesource.com/platform/development/+/master/samples/training/NsdChat/src/com/example/android/nsdchat/NsdHelper.java
NsdHelper helper;
BroadcastReceiver wifiReciever = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)) {
if (intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false)) {
//do stuff
helper.stopDiscovery();
helper = new NsdHelper(context);
helper.discoverServices();
} else {
// wifi connection was lost
helper.stopDiscovery();
}
}
}
};
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
//startDiscovery();
// helper = new NsdHelper(this);
// helper.discoverServices();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION);
registerReceiver(wifiReciever, intentFilter);
Toast.makeText(this,"Service Started",Toast.LENGTH_SHORT).show();
}
@Override
public void onDestroy() {
// if(service!= null)
// {
// service.stop();
// helper.stopDiscovery();
// }
unregisterReceiver(wifiReciever);
//
Toast.makeText(this,"Service destroyed",Toast.LENGTH_SHORT).show();
super.onDestroy();
}