2010-12-02 11 views
0

J'utilise le code suivant pour établir quel réseau le dispositif utilise:TelephonyManager.getNetworkType() et les problèmes HSDPA :(

TelephonyManager tempManager; 
tempManager= (TelephonyManager)myContext.getSystemService(Context.TELEPHONY_SERVICE); 
int result = 0; 
    if(tempManager != null && tempManager.getNetworkType() == TelephonyManager.NETWORK_TYPE_UMTS) //do we have a UMTS connection ? 
    { 
    result = 2; 
    } 
    else if(tempManager != null && tempManager.getNetworkType() == TelephonyManager.NETWORK_TYPE_GPRS) //or is it just a shabby 2g connection ? 
    { 
    result = 1; 
    } 
    else if(tempManager != null && tempManager.getNetworkType() == TelephonyManager.NETWORK_TYPE_UNKNOWN) //or is it just a shabby 2g connection ? 
    { 
    result = 4; 
    } 
return result; 

Il fonctionne très bien à moins d'obtenir une connexion HSDPA, en ce sens Dans ce cas, il retournera toujours 0, ce qui dans mon cas fait penser à mon logiciel qu'il n'a aucune connexion :(

Toute personne qui sait ce qui se passe, a une certaine expérience à ce sujet et le plus important a une solution à ce problème ???

Merci à l'avance

Répondre

2

Il y a un ENUM aussi pour HSDPA

Pour vérifier s'il y a une connexion et aussi obtenir un type, je préfère l'utilisateur getActiveNetworkInfo et isConnected. Il renvoie null lorsqu'il n'y a pas de connexion. Vous pouvez également vérifier le type de connexion par getType et getSubtypeName méthodes ou vous pouvez mélanger avec votre approche.

+0

hhhmmm de votre application, bon sang qui explique beaucoup! c'est là depuis api niveau 5 :(j'ai fait un projet 1.6 qui ne le reconnait évidemment pas :( – TiGer

+1

:) Vous pouvez utiliser des API plus récentes.C'est juste un const statique, donc ça marchera sur les anciens appareils. –

0

Ceci est le code que j'utilise. Il va vérifier en toute sécurité une connexion et ensuite retourner le type de connexion. Pour mon application, je me soucie uniquement de Wifi, Mobile, ou non connecté, c'est donc ce que cette fonction va retourner. Changer pour votre propre situation.

//Check weather Internet connection is available or not 
public int checkConnectionType() 
{ 
    final ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    final NetworkInfo activeNetInfo = conMgr.getActiveNetworkInfo(); 
    if (activeNetInfo != null && activeNetInfo.isAvailable() && activeNetInfo.isConnected()) 
    { 
     int type = activeNetInfo.getType(); 
     if (type == ConnectivityManager.TYPE_MOBILE || type == ConnectivityManager.TYPE_MOBILE_DUN 
       || type == ConnectivityManager.TYPE_MOBILE_HIPRI || type == ConnectivityManager.TYPE_MOBILE_MMS 
       || type == ConnectivityManager.TYPE_MOBILE_SUPL || type == ConnectivityManager.TYPE_WIMAX) 
     { 
      return ConnectivityManager.TYPE_MOBILE; 
     } 
     else if (type == ConnectivityManager.TYPE_WIFI) 
     { 
      return ConnectivityManager.TYPE_WIFI; 
     } 
     else 
     { 
      // Unknown connection type, so to be safe say mobile 
      return ConnectivityManager.TYPE_MOBILE; 
     } 
    } 
    else 
    { 
     // return not connected 
     return -1; 
    } 
} 

Vous aurez besoin de cette autorisation dans le manifeste

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