问题
We have an option to check the network connection types in Android (whether it is 3G, edge or gprs).
I need to check the the bandwidth rate. I need to initiate a call. For that I need to check the bandwidth rate. Above a particular bandwidth only I need to make visible an option for a call (to initiate a call).
I need to find the connection speed programmatically (connection speed for Mobile Data Link, EDGE).
回答1:
You can download a known-size file from your server, and calculate how long did it take to download it. Then you have your bandwidth. Simple but works :)
Sample, not tested :
//Download your image
long startTime = System.currentTimeMillis();
HttpGet httpRequest = new HttpGet(new URL(urlString).toURI());
HttpClient httpClient = new DefaultHttpClient();
HttpResponse response = (HttpResponse) httpClient.execute(httpRequest);
long endTime = System.currentTimeMillis();
HttpEntity entity = response.getEntity();
BufferedHttpEntity bufHttpEntity;
bufHttpEntity = new BufferedHttpEntity(entity);
//You can re-check the size of your file
final long contentLength = bufHttpEntity.getContentLength();
// Log
Log.d(TAG, "[BENCHMARK] Dowload time :"+(endTime-startTime)+" ms");
// Bandwidth : size(KB)/time(s)
float bandwidth = contentLength / ((endTime-startTime) *1000);
回答2:
This will Returns the current link speed in LINK_SPEED_UNITS.
but this work for WIFI Only
WifiManager wifiManager = Context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
if (wifiInfo != null) {
Integer linkSpeed = wifiInfo.getLinkSpeed(); //measured using WifiInfo.LINK_SPEED_UNITS
}
回答3:
Try facebook network library class (library size = 16 KB)
We can fetch manually / network change listener also available.
Manual fetch code:
ConnectionQuality cq = ConnectionClassManager.getInstance().getCurrentBandwidthQuality();
Github link - https://github.com/facebook/network-connection-class
来源:https://stackoverflow.com/questions/8225791/check-the-bandwidth-rate-in-android