2010-12-11 4 views
3

J'ai une application qui essaie d'être un bon samaritain, essentiellement lorsque des services démarrent et doivent interagir avec le réseau. Je vérifie pour voir si l'appareil dispose d'une connectivité:Sachez quand la connectivité réseau est rétablie

hasConnectivity Méthode

private boolean hasConnectivity() { 
    NetworkInfo info = mConnectivity.getActiveNetworkInfo(); 
    boolean connected = false; 
    int netType = -1; 
    int netSubtype = -1; 

    if (info == null) { 
     Log.w(sTag, "network info is null"); 
     notifyUser(MyIntent.ACTION_VIEW_ALL, "There is no network connectivity.", false); 
    } else if (!mConnectivity.getBackgroundDataSetting()) { 
     Log.w(sTag, "background data setting is not enabled"); 
     notifyUser(MyIntent.ACTION_VIEW_ALL, "background data setting is disabled", false); 
    } else { 
     netType = info.getType(); 
     netSubtype = info.getSubtype(); 

     if (netType == ConnectivityManager.TYPE_WIFI) { 
      connected = info.isConnected(); 
     } else if (netType == ConnectivityManager.TYPE_MOBILE 
        && netSubtype == TelephonyManager.NETWORK_TYPE_UMTS 
        && !mTelephonyManager.isNetworkRoaming() 
       ) { 
      connected = info.isConnected(); 
     } else if (info.isRoaming()) { 
      notifyUser(MyIntent.ACTION_VIEW_ALL, "Currently Roaming skipping check.", false); 
     } else if (info.isAvailable()) { 
      connected = info.isConnected(); 
     } else { 
      notifyUser(MyIntent.ACTION_VIEW_ALL, "..There is no network connectivity.", false); 
     } 
    } 
    return connected; 
} 

Lorsque cette méthode retourne false je sais que je n'ai pas de connexion parce que l'utilisateur est sur le téléphone ou 3g et le wifi n'est pas disponible

Quelle est la meilleure façon de savoir quand la connectivité est disponible sans sortir les statistiques du réseau avec une minuterie périodiquement?

Y at-il une action Intent que je peux observer avec un récepteur de diffusion qui annonce un changement avec la connectivité?

Merci pour toute aide, je vais continuer à chercher dans les documents pour savoir quoi faire ensuite.

Répondre

3

C'est ce que j'ai pour vérifier l'accès à Internet (en fait, plus comme si le Wifi est activé et connecté à un réseau).

public class ConnectivityReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    String action = intent.getAction(); 

    if(action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) 
    { 
     WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
     MainMap.setWifiState(wm.getWifiState()); 
     Log.e("Debug", "Setting wifistate: " + wm.getWifiState()); 
    } else if(action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) 
    { 
     NetworkInfo ni = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); 
     MainMap.setConnected(ni.isConnected()); 
     Log.e("Debug", "Setting isConnected: " + ni.isConnected()); 
     if(ni.isConnected()) Toast.makeText(context, "Connected!", Toast.LENGTH_LONG).show(); 
    } 
} 

}

Il ne devrait pas être trop difficile de vérifier si l'utilisateur est en 3G ou Wifi sur.

+0

Merci, vous devez avoir manqué ConnectivityManager.CONNECTIVITY_ACTION lorsque je parcourais les documents. Était exactement ce que j'espérais. – Double

+0

Bon à savoir mes heures de recherche et de malédiction ont aidé quelqu'un en dehors de moi-même. – iarwain01

Questions connexes