2010-12-13 28 views
7

我正在開發一個應用程序,除了一件事情之外,它幾乎完成:我不知道如何獲得鏈接速度並將其置於狀態欄中。我是Java新手,如果有人可以幫助我,我會非常感謝。 P.S.對不起,英文不好。如何以編程方式獲取鏈接速度?

+1

什麼是鏈接速度應該是? – 2010-12-13 14:10:47

+0

您的意思是帶寬下載速度?或者你可能會提到一個不確定的進度條? – Franco 2010-12-13 14:11:55

+0

你想知道互聯網連接能夠下載多快嗎?或者現在它下載速度有多快?還是其他什麼東西? – 2010-12-13 15:03:42

回答

34

正如提問者所建議的那樣,您的問題並不十分清楚。您可以指鏈路連接速度(即高達54 Mbps,具有良好的信號接收Wifi或高達7.2 Mbps的全速HSDPA),這取決於:

  • 你正在使用的網絡接口時間。某些電話允許共享,這意味着您可以同時啓用Wifi和移動數據鏈路(GPRS/3G/HSDPA)或自動切換(如果您的Wifi連接斷開,您的電話將自動切換到移動網絡(如果激活))。
  • 連接速度在時間協商。取決於信號質量/運營商網絡配置(有些具有最大速度限制)/移動數據合同(每月帶寬配額通常意味着默認爲GPRS速度)。

在這種情況下,恐怕沒有標準Java API的方法來知道它,但Android的API所需的功能:

  • 對於無線網絡鏈接速度檢查WifiInfo.getLinkSpeed()
  • 移動數據鏈接我擔心你只能檢查TelefonyManager.getNetworkType()來確定當前的移動數據鏈路類型。然後您應該通過鏈路類型接近實際速度(即,對於高達128 kbps的GPRS,對於高達236.8 kpbs的EDGE,對於高達2 Mbps的3G,對於高達7.2 Mbps的HSDPA)。考慮到這只是一個aproximation。您可能使用HSDPA連接,但您的運營商將最高速度限制爲2 Mbps。

在您參考當前(下載/上傳)數據鏈路速度這是隻適用於較高水平,實際測量而不是鏈接速度,但你的手機和服務器之間的速度其他情況下,這不僅取決於你的鏈接速度,還取決於許多其他因素(手機和服務器之間的所有鏈接,服務器本身等)。您可以測量「HTTP級別速度」,這意味着HTTP數據速度(不考慮數據包的開銷流量),因爲通常只有HTTP連接在每種情況下都受支持(您的運營商可能會隱藏您的代理,將所有內容過濾掉,但HTTP交通)。

如果您使用的是8級API,還可以使用名爲TrafficStats的有趣功能。這可以讓您知道手機通過移動數據鏈路交換的低級別的發送/接收數據包,該數據包可能只提供您在哪裏查找的信息(使用這些測量和經過的時間,您可以輕鬆地測量當前/平均使用的數據鏈接速度)。

+0

感謝您的快速響應 – 4yBAk 2010-12-13 16:26:40

+0

您可以通過檢測3G連接速度瞭解更多細節嗎?當我輸出TelefonyManager.getNetworkType()時,它返回「CONNECTED」,而不是特定的電話類型。 – worked 2011-12-08 20:10:26

2

你不能直接說出來。您必須詢問底層的操作系統。對於OS X,您可以在相應的網絡端口上解析「/ sbin/ifconfig」的輸出。

1

您也可以使用JNI編寫擴展名,並使用C來詢問連接速度。如果您不想解析來自其他應用程序的輸出,但請記住此解決方案不可移植。

相關問題