Трансляция onReciever вызывает несколько раз, и это дает исключение Source not found

Когда Wi-Fi-соединение или мобильное соединение для передачи данных включено, я уведомляю в своем приложении. Но мой метод onReciever вызывает несколько раз, и он выдает "Источник не найден". Но в моем logcat он не печатает никаких исключений. Во время отладки только это исключение я обнаружил.В время отладки, когда метод onReciever заканчивается, отладчик возвращает "Источник не найден".

@Override
public void onReceive(final Context context, final Intent intent) {

    System.out.println("Network change reciever started");      
    String status = NetworkUtil.getConnectivityStatusString(context);
    Toast.makeText(context, status, Toast.LENGTH_LONG).show();
}

Когда onReciever звонит, мой syso печатает 4 раза в logcat и toas cams 2,3 раза. Почему?

В чем проблема в моем коде?

Манифест:

<receiver
        android:name="com.electrical.coc.nz.automaticserversync.NetworkChangeReceiver"
        android:enabled="true"
        android:label="NetworkChangeReceiver" >
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
        </intent-filter>
    </receiver>

Обновление 1#

public class NetworkUtil {

public static int TYPE_WIFI = 1;
public static int TYPE_MOBILE = 2;
public static int TYPE_NOT_CONNECTED = 0;

public static int getConnectivityStatus(Context context) {
    ConnectivityManager cm = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    if (null != activeNetwork) {
        if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI)
            return TYPE_WIFI;

        if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE)
            return TYPE_MOBILE;
    }
    return TYPE_NOT_CONNECTED;
}

public static String getConnectivityStatusString(Context context) {
    int conn = NetworkUtil.getConnectivityStatus(context);
    String status = null;
    if (conn == NetworkUtil.TYPE_WIFI) {
        status = "Internet connection enabled";
    } else if (conn == NetworkUtil.TYPE_MOBILE) {
        status = "Internet connection enabled";
    } else if (conn == NetworkUtil.TYPE_NOT_CONNECTED) {
        status = "Internet connection disabled";
    }
    return status;
}
}

2 ответа

Попробуйте этот код:

if (null != activeNetwork && activeNetwork.isConnected()) {

isConnected() : Indicates whether network connectivity exists and it is possible to
establish connections and pass data.
Always call this before attempting to perform data transactions.

Проверьте эту ссылку, которая рассказывает, как отлаживать Source not found exception

Ваши различные сетевые подключения (3G, WiFi), вероятно, все переходят через разные состояния, и каждое из них вызывает событие изменения. Вы захотите добавить больше логики в свой приемник, чтобы определить новый статус сети. Проверьте эту страницу, чтобы узнать больше об этом.

Другие вопросы по тегам