2015-09-04 81 views
0

在應用中,我需要找出當前網絡連接(WLAN/3G/4G)的當前(最大)帶寬。獲取網絡連接的當前帶寬(WLAN/3G)?

這怎麼辦?

因爲有效的網絡上傳/下載速度取決於文件大小,所以上傳小文件(如20kb左右)將不會成爲選項,因爲我可能會獲得5MB,20MB或50MB文件不同的網絡速度。

上傳大文件是另一種選擇,但它需要多大,以及需要多長時間檢查當前最大帶寬?

我猜這是不是已經可以從系統(android)當前連接的地方。

我的想法是在應用程序使用該應用程序時可以使用該信息,該應用程序也可以在後臺運行。

回答

2

從Facebook有一個庫叫network-connection-class

它提供了DeviceBandwidthSampler,您可以使用它來執行採樣。它還提供ConnectionClassManager通知您帶寬質量(取樣後)。

帶寬質量信息在Connection Quality中定義。

2

您可以使用ConnectivityManager獲取網絡信息。首先在這裏,你可以檢查用戶是否連接到Wifi。如果他們是在移動無線電,你可以抓住它們連接到帶網絡的類型如下:

ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 

NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 

if(activeNetwork.getType() != ConnectivityManager.TYPE_WIFI) 
{ 
    String typeName=activeNetwork.getSubtypeName() 
    int type = activeNetwork.getSubtype() 
    switch(type) 
    { 
     // values are of type TelephonyManager.NETWORK_TYPE_* enums 
    } 
} 

一個方便的查找表,然後讓你知道你處理什麼樣的網絡,什麼期待儘可能好的帶寬和延遲。

但事實上,該價值給你最好的情況下,在野外,你會得到更糟糕的結果。即使你的用戶可能在LTE網絡上,用戶可能會在本月的數據上限,並因此而受到限制連接。

這就是爲什麼我喜歡總是將時間度量添加到已知的資產大小。因此,如果您獲取128x128縮略圖,您大概知道它的大小有多少個字節,並且通過上述信息,您可以猜測它是預期的獲取延遲。但是,您可以計算獲取時間,並相應地調整您的指標。

正在建立網絡正確更多的是編寫適應網絡條件的代碼,而不是其他任何東西。

相關問題