2015-01-02 6 views
2

Почему при приеме дважды вызываются при изменении состояния сети.onReceive дважды называется BroadcastReceiver для сетевого прослушивателя в android

манифеста:

<receiver android:name="tv.meterreading.network.NetworkChangeReceiver" > 
     <intent-filter> 
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE" > 
      </action> 
     </intent-filter> 
    </receiver> 
+1

http://stackoverflow.com/questions/5276032/connectivity-action-intent-received-twice-when-wifi-connected, http://stackoverflow.com/questions/8412714/BroadcastReceiver-получает-множественные идентичные-сообщения к одному-событиям –

ответ

-1

Получение множественного вещания является специфической проблемой устройства. Некоторые телефоны просто отправляют одну трансляцию в то время как другие отправляют 2 или 3. Но есть работа вокруг:

Предполагая, что вы получите сообщение об отключении, когда Wi-Fi отключен, я бы предположил, что первый из них правильный, а другой 2 по какой-то причине являются лишь эхом.

Чтобы узнать, что сообщение было вызвано, вы можете иметь статическое логическое значение, которое переключается между подключением и отключением и вызывает вызовы подпрограмм при получении соединения, а логическое значение - true. Что-то вроде:

public class ConnectionChangeReceiver расширяет BroadcastReceiver { private static boolean firstConnect = true;

@Override 
public void onReceive(Context context, Intent intent) { 
    final ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    final NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo(); 
    if (activeNetInfo != null) { 
     if(firstConnect) { 
      // do subroutines here 
      firstConnect = false; 
     } 
    } 
    else { 
     firstConnect= true; 
    } 
} 

}

Смежные вопросы