评估连接速度的最佳方法



我正在开发一个应用程序,需要通过流媒体播放现场音乐文件。

在请求歌曲api中,我可以指定带宽(例如:50kbps, 100kbps, 300,600或1mbps)。

带宽越大,获取文件的时间就越长。因为我不希望用户受到限制,所以我有多种选择来处理它:

  • 检测手机是使用3g, wifi还是Edge,并为每种连接速度指定带宽

  • 让用户决定他将得到的歌曲的质量:像youtube(但用户不会是了解计算机的人:软件越容易,它就越适合)

  • 有一种正确评估连接速度的方法:像获取文件一样,测量它所花费的时间并设置带宽。

我知道如果用户失去wifi,或者在街上使用3g,连接速度可能会有很大变化。问题是,当歌曲播放时,我无法改变带宽。

也许你有你想分享的经验?

谢谢!

Facebook发布了一个库:

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

为什么不试着改变一下你对事物的看法呢?试着与你的用户交流。假设您的用户希望下载128kbit质量的歌曲。你开始下载,在下载的同时,你设定一个平均下载时间,花几秒钟让这个平均时间稳定下来,如果低于某个值,就弹出一个窗口,告诉用户他的连接速度太慢,不适合当前的带宽,并询问他是降低质量还是继续慢速下载。

这将:

  1. 允许用户选择始终假设他们可以获得最佳质量的媒体。
  2. 允许你在运行时检查,并在下载时相应地更改质量,而无需预先检查。
  3. 让你的应用对用户来说更简单。

我知道我没有回答你的具体要求,我只是提供了一个不同的观点。

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();
}

检测Android的网络连接类型

您可以在这里查看所有可用选项:http://developer.android.com/reference/android/telephony/TelephonyManager.html

这可以修复移动网络类型,但不能帮助你提高Wifi速度,你应该从你知道的服务器上下载一些代码并计算时间。

相关内容

  • 没有找到相关文章

最新更新