Подключение к Интернету и приемник вещания - PullRequest
0 голосов
/ 24 октября 2018

Я работаю над приложением, в котором мне нужно проверить, стабилизировано ли интернет-соединение или нет.Если интернет-соединение не стабилизировано, тогда нам нужно позвонить в наш веб-сервис, иначе мы этого не сделаем.

Для этого я написал следующий приемник Broadcast на Java, так как я читал, что android теперь хочет, чтобы разработчик зарегистрировал этот приемник в классе Java.

так вот оно

private class NetworkChangeBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {


           callMyWebService();


    }


 @Override
    protected void onResume() {
        super.onResume();


        if (!isNetworkBroadcastReceiverRegistered) {
            if (NetworkChangeBR == null) {
                NetworkChangeBR = new NetworkChangeBroadcastReceiver();
                registerReceiver(NetworkChangeBR, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
                isNetworkBroadcastReceiverRegistered = true;
            }
        }

        acquireWakeLock(mCustomSharedPreferences.getBoolean(CustomSharedPreferences.KEEP_SCREEN_ON_ALL_THE_TIME, false));

    }

    @Override
protected void onPause() {
    super.onPause();
    if (isNetworkBroadcastReceiverRegistered) {
        unregisterReceiver(NetworkChangeBR);
        NetworkChangeBR = null;
        isNetworkBroadcastReceiverRegistered = false;
    }
}

Проблемы: Но я сталкиваюсь со следующими проблемами

  • Когда я впервыезарегистрируйте получателя в моем методе onResume, он автоматически запускается, что, в свою очередь, вызывает мой веб-сервис, где в реальном времени не происходит никаких изменений в Интернете
  • Во-вторых, это только проверка беспроводного соединения и отключение, но я хочуполучить обратный вызов, когда беспроводное соединение наконец подключено к Интернету, и когда это произойдет, трансляция должна вызвать обратный вызов для моего приложения

Пожалуйста, помогите мне в обоих случаях.

1 Ответ

0 голосов
/ 24 октября 2018

Причина, по которой ваш BroadcastReceiver сразу активируется, заключается в том, что трансляция Intent ConnectivityManager.CONNECTIVITY_ACTION является «липкой» трансляцией.Это позволяет приложениям регистрироваться и немедленно получать последнее широковещательное событие этого типа (чтобы они могли определять текущую ситуацию с подключением).Если эта «липкая» трансляция вызывает у вас проблемы, просто проверьте это в onReceive() и проигнорируйте ее:

// Ignore the sticky broadcast of the initial state
if (isInitialStickyBroadcast()) {
    return;
}

В Intent много данных, переданных как «дополнительные»,BroadcastReceiver получает.Например, вы можете сказать, является ли событие событием CONNECT или DISCONNECT и т. Д. Проверьте документацию на ConnectivityManager, чтобы определить, какие «дополнительные» отправляются и как их использовать.

...