我正在开发一款需要通过流媒体播放音乐文件以进行实时播放的应用。
在请求歌曲api中,我可以指定带宽(例如:50kbps,100kbps,300,600或1 Mbps)。
bandwith越大,文件获取的时间就越长。由于我不希望用户受到限制,我有多种选择来处理它:
检测手机是否正在使用3g,wifi或Edge,并为每个连接速度指定带宽。
让用户决定他将获得的歌曲的质量:像youtube(但用户不会是那些了解计算的人:软件越容易,它就越适合)< / p>
有办法正确评估连接速度:比如提取文件,测量花费的时间并设置带宽。
我知道如果用户放松wifi,或者在街上使用3g移动,连接速度可能会有很大变化。而事实是,当歌曲播放时我无法改变带宽。
也许您有想要分享的经验?
谢谢!
答案 0 :(得分:40)
答案 1 :(得分:4)
为什么不试着改变你对事物的看法。 尝试与您的用户一起流动。说你的用户希望下载128 kbit质量的歌曲。你开始下载,下载你平均下载时间,花费几秒钟让这个平均值稳定下来,如果它低于一定值,弹出告诉用户他的连接速度太慢,不能满足当前的带宽要求他是否要降低质量或继续下载。
这将:
我知道我没有回答你的具体要求,我只是提出了不同的观点。
答案 2 :(得分:4)
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();
}
答案 3 :(得分:2)
Detect network connection type on Android
您可以在此处查看所有可用选项:http://developer.android.com/reference/android/telephony/TelephonyManager.html
这可以修复移动网络类型但无法帮助您提高Wifi速度,您应该通过从您知道的服务器下载内容并计算时间来编写代码。
我希望它有所帮助。