Обнаружение сетевых служб не просыпается, когда приложение возвращается из режима AirPlane в Wi-Fi во время работающего приложения - PullRequest
3 голосов
/ 10 апреля 2019

У меня возникла проблема, связанная с обнаружением сетевых служб.

Когда я запускаю приложение с подключенным 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();
    }
...