2010-11-21 3 views
4

Je sais qu'il est possible de déterminer le type de connexion de données (WIFI/ou cellulaire) via Android, mais est-il possible de déterminer le type et la force de la connexion cellulaire?Déterminer la force du signal de données

J'ai une application qui télécharge quelques images et j'ai trouvé que sur GPRS ou sur 3G avec un signal faible que ce processus de téléchargement ralentit l'application de façon inacceptable. Ce que je veux faire est de dire que si vous avez soit WIFI ou une connexion de données forte et rapide, alors téléchargez; sinon afficher une image d'espace réservé par défaut.

Des indices sur la façon de procéder?

Répondre

2

Que diriez-vous de ne pas bloquer le thread de l'interface utilisateur et d'exécuter des tâches longues dans un thread d'arrière-plan auquel ils appartiennent?

Recherchez la référence sur AsyncTask et l'article sur le filetage appelé Painless Threading.

Mise à jour: D'accord, puis recherchez la page de référence sur ConnectivityManager qui fait exactement ce que vous voulez.

Update2: Je viens de réaliser que vous vouliez connaître la puissance du signal. Dans ce cas, vous devez rechercher la classe SignalStrength.

+0

J'ai fait tout cela - c'est toujours juste une chose péniblement lente sur une mauvaise connexion de données –

+0

Non, ce n'est pas le cas. Cela pourrait me dire quel type de connexion mais, autant que je peux le voir, il ne donne aucune information sur la force du signal ... –

+0

Re: Mise à jour 2: Merci - c'est utile. –

2
  • Détermination de la technologie radio (type de réseau) est simple:

TelephonyManager tm = (TelephonyManager) getSystemService (Context.TELEPHONY_SERVICE);

int nt = tm.getNetworkType(); 

    switch (nt) { 
      case 1: return GPRS; 
      case 2: return EDGE; 
      case 3: return UMTS; 
      case 8: return HSDPA; 
      case 9: return HSUPA; 
      case 10:return HSPA; 
      default:return UNKNOWN; 
      } 
  • Si vous voulez estimer le temps de téléchargement, vous devez Mesuré la bande passante en Kbps en ouvrant la connexion socket par exemple .. Mais cela est trop compliqué! Je vous suggère d'essayer de télécharger l'image dans AsyncTask de toute façon et de définir une limite de temps pour dire 5 secondes. Si le téléchargement n'est pas terminé, arrêtez l'asynctask et affichez une image d'espace réservé par défaut.
Questions connexes