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!
Facebook a publié une bibliothèque pour cela:
https://github.com/facebook/network-connection-class
cela n'existait pas en 2011 ..
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();
}
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é:
Je sais que je ne réponds pas à vos besoins spécifiques, je propose simplement une vue différente.
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.