web-dev-qa-db-fra.com

Meilleure façon d'évaluer la vitesse de connexion

Je suis en train de développer une application qui a besoin d'obtenir un fichier musical en streaming pour jouer en direct.

Dans l'api de la chanson de demande, je peux spécifier la bande passante (par exemple: 50kbps, 100kbps, 300, 600 ou 1 Mbps).

Plus la bande passante est grande, plus le fichier aura le temps d'être récupéré. Comme je ne veux pas que les utilisateurs soient restreints à ce sujet, j'ai plusieurs choix pour y faire face:

  • Détectez si le téléphone utilise 3g, wifi ou Edge et spécifiez une bande passante pour chaque vitesse de connexion.

  • Laissez l'utilisateur décider de la qualité de la chanson qu'il obtiendra: comme YouTube (mais les utilisateurs ne seront pas des gens qui connaissent beaucoup l'informatique: plus le logiciel est facile, plus il conviendra)

  • Avoir un moyen d'évaluer correctement la vitesse de connexion: comme aller chercher un fichier, mesurer le temps qu'il a fallu et régler la bande passante.

Je sais que la vitesse de connexion peut varier considérablement si l'utilisateur perd le wifi ou utilise du 3G en se déplaçant dans la rue. Et le fait est que je ne peux pas changer la bande passante lorsque la chanson sera jouée.

Peut-être avez-vous une expérience à ce sujet que vous aimeriez partager?

Je vous remercie!

34
jDourlens

Facebook a publié une bibliothèque pour cela:

https://github.com/facebook/network-connection-class

cela n'existait pas en 2011 ..

41
jDourlens
protected String doInBackground(String... urls) {
    String response = "";

    startTime = System.currentTimeMillis();
    for (String url : urls) {
        DefaultHttpClient client = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(url);
        try {

            HttpResponse execute = client.execute(httpGet);
            InputStream content = execute.getEntity().getContent();


            BufferedReader buffer = new BufferedReader(
                    new InputStreamReader(content));
            String s = "";
            while ((s = buffer.readLine()) != null) {
                response += s;
            }
            endTime = System.currentTimeMillis();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return response;
}

@Override
protected void onPostExecute(String result) {
    // TODO Auto-generated method stub


    long dataSize = result.length() / 1024;
    takenTime = endTime - startTime;
    long s = takenTime / 1000;
    double speed = dataSize / s;

    Toast.makeText(context, "" + s + "kbps", Toast.LENGTH_SHORT).show();
}
4

pourquoi ne pas essayer de changer votre vision des choses. Essayez de circuler avec vos utilisateurs. dites que votre utilisateur souhaite télécharger une chanson de qualité à 128 kbit. vous démarrez le téléchargement, PENDANT le téléchargement, vous effectuez un temps de téléchargement moyen, prenez quelques secondes pour que cette moyenne se stabilise, et si elle est inférieure à une certaine valeur, faites un pop-up pour dire à l'utilisateur que sa connexion est trop lente pour la bande passante actuelle et demandez lui si pour diminuer la qualité ou pour continuer à télécharger lentement.

Cette volonté:

  1. laissez aux utilisateurs la possibilité de toujours supposer qu'ils peuvent obtenir les meilleurs médias de qualité.
  2. laissez-vous faire votre vérification lors de l'exécution et modifiez la qualité en conséquence pendant le téléchargement sans avoir besoin de pré-vérifier.
  3. garde votre application simple pour les utilisateurs.

Je sais que je ne réponds pas à vos besoins spécifiques, je propose simplement une vue différente.

4
codeScriber

Détecter le type de connexion réseau sur Android

Vous pouvez vérifier toutes les options disponibles ici: http://developer.Android.com/reference/Android/telephony/TelephonyManager.html

Cela peut fixer le type de réseau mobile mais ne peut pas vous aider avec la vitesse Wifi, vous devez le coder en téléchargeant quelque chose à partir d'un serveur que vous connaissez et calculer le temps.

J'espère que ça aide.

2
atzu