2010-12-21 6 views
8

Est-il possible d'implémenter PhoneStateListener (ou tout autre mécanisme) pour détecter la restauration de la connexion réseau 3G ou Wifi?Détection de la restauration du réseau 3G ou Wifi

Je vois à la fois LISTEN_DATA_CONNECTION_STATE et LISTEN_DATA_ACTIVITY dire (cellulaire) dans le résumé de l'API. Cela signifie-t-il seulement la 3G?

Merci

Répondre

26

Une meilleure approche serait d'utiliser la classe android.net.ConnectivityManager. Enregistrez le récepteur et surveillez les diffusions.

private class ConnectionMonitor extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     if (!action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) { 
      return; 
     } 
     boolean noConnectivity = intent.getBooleanExtra(
      ConnectivityManager.EXTRA_NO_CONNECTIVITY, false); 
     NetworkInfo aNetworkInfo = (NetworkInfo) intent 
      .getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); 
     if (!noConnectivity) { 
      if ((aNetworkInfo.getType() == ConnectivityManager.TYPE_MOBILE) 
       || (aNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI)) { 
       // Handle connected case 
      } 
     } else { 
      if ((aNetworkInfo.getType() == ConnectivityManager.TYPE_MOBILE) 
       || (aNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI)) { 
       // Handle disconnected case 
      } 
     } 
    } 
} 

private synchronized void startMonitoringConnection() { 
    IntentFilter aFilter = new IntentFilter(
     ConnectivityManager.CONNECTIVITY_ACTION); 
    registerReceiver(mConnectionReceiver, aFilter); 
} 
private synchronized void stopMonitoringConnection() { 
    unregisterReceiver(mConnectionReceiver); 
} 

mConnectionReceiver = new ConnectionMonitor(); 
+0

Il ne fonctionne pas! – meh

+0

Êtes-vous sûr? Ne reçoit pas les émissions du tout ou quoi? – Zelimir

+0

il reçoit des diffusions, mais noConnectivity renvoie false tout le temps. – meh

Questions connexes