Метод ConnectivityManager.NetworkCallback () -> onAvailable (Network network) не запускается, когда устройство подключается к внутренней сети Wi-Fi. - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь отправить телецентры в App Center во внутренней сети Wi-Fi, но в этой сети он не отправляется, а во внешней.При отладке обнаружил, что метод onAvailable () не вызывается, когда устройство подключено к внутреннему Wi-Fi, но вызывается при подключении к любому внешнему Wi-Fi.

Ниже приведен код из SDK App Center:
appcenter \ utils\ NetworkStateHelper.javaNetworkStateHelper.java.Класс NetworkStateHelper -> Метод reopen () -> метод public void onAvailable (Network network)

Пример кода:

private ConnectivityManager.NetworkCallback mNetworkCallback = new ConnectivityManager.NetworkCallback() 
{

    @Override
    public void onAvailable(Network network) {
        onNetworkAvailable(network);
    }

    @Override
    public void onLost(Network network) {
        onNetworkLost(network);
    }
};

Он должен вызывать метод onAvailable при подключении к внутренней сети Wi-Fi.

1 Ответ

0 голосов
/ 05 февраля 2019

Как написано в Android документы :

Приложения, ориентированные на Android 7.0 (уровень API 24) и выше, не получают широковещательные сообщения CONNECTIVITY_ACTION, если они объявляют получателя широковещания в своем манифесте.,Приложения по-прежнему будут получать широковещательные сообщения CONNECTIVITY_ACTION, если они зарегистрируют свой BroadcastReceiver с помощью Context.registerReceiver (), и этот контекст будет по-прежнему действителен.

Это означает, что если целевое значение API превышает 24, вам необходимо зарегистрировать широковещательный приемник, когдаваша активность начинается.

в вас Активность onCreate()

IntentFilter intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(connectivityReceiver, intentFilter);

объявляет трансляцию:

private BroadcastReceiver connectivityReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
      //check state here....
    }
  };
...