2013-10-06 16 views
5

Ho il seguente nel mio manifestoBroadcastReceiver su android.net.conn.CONNECTIVITY_CHANGE chiamato più volte

<receiver android:name=".receiver.WifiReceiver" > 
      <intent-filter> 
       <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
      </intent-filter> 
</receiver> 

e la seguente BroadcastReceiver:

public class WifiReceiver extends BroadcastReceiver { 
private static String TAG = makeLogTag(WifiReceiver.class); 

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

    ConnectivityManager connectivityManager = (ConnectivityManager) 
      context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = null; 
    if (connectivityManager != null) { 
     networkInfo = 
       connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

     LOGD(TAG, "connectivity info:" + networkInfo); 
    } 

    if(networkInfo != null && networkInfo.isConnected()) { 
     //TODO: see why this is called multiple times and handle schedule reloading 
     LOGD(TAG, "have Wifi connection and is connected"); 
    }else 
     LOGD(TAG, "don't have Wifi connect or it isn't connected"); 
} 

Quando passo da cellulare a WiFi ricevitore viene chiamato più volte (nessun problema), ma il ramo if(networkInfo != null && networkInfo.isConnected()) valuta per vero tutte le 4 volte

risposta

0

È strano. In ogni caso provare questo po 'diverso codice:

ConnectivityManager cm = 
    (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 

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

    if(isConnected && isWiFi){ 

    } 
} 
4
public class NetworkChangeReceiver extends BroadcastReceiver { 
Context mContext; 

@Override 
public void onReceive(Context context, Intent intent) { 
    mContext = context; 
    String status = NetworkUtil.getConnectivityStatusString(context); 

    Log.e("Receiver ", "" + status); 

    if (status.equals("Not connected to Internet")) { 
     Log.e("Receiver ", "not connction");// your code when internet lost 


    } else { 
     Log.e("Receiver ", "connected to internet");//your code when internet connection come back 
    } 

} 

}

e utilizzare il presente invito a wifi assegno o internet conenctivity perso

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 = "Wifi enabled"; 
     status="Internet connection available"; 
    } else if (conn == NetworkUtil.TYPE_MOBILE) { 
     //status = "Mobile data enabled"; 
     status="Internet connection available"; 
    } else if (conn == NetworkUtil.TYPE_NOT_CONNECTED) { 
     status = "Not connected to Internet"; 
    } 
    return status; 
} 

}

e aggiungere questo in il tuo file androidmanifest

<receiver 
     android:name=".NetworkChangeReceiver" 
     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> 

Aggiungi il permesso internet nel manifest file:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

spero che sia il lavoro per voi e

+1

funziona bene, ma ho bisogno anche di aggiungere nel manifest file: ' ' – blub

Problemi correlati