2014-12-18 7 views
6

네트워크 연결 대역폭 (kbps 또는 mbps)을 가져오고 싶습니다. 장치가 wifi에 연결되어 있으면 네트워크 대역폭 (속도)과 모바일 데이터를 반환해야합니다.네트워크 연결 확인 대역폭 및 모바일 데이터 대역폭 (속도)

그것은 Wi-Fi 용량 비율을 반환하지만 정확한 데이터 전송 속도를 원합니다.

public String getLinkRate() 
{ 
    WifiManager wm = (WifiManager)getSystemService(Context.WIFI_SERVICE); 
    WifiInfo wi = wm.getConnectionInfo(); 
    return String.format("%d Mbps", wi.getLinkSpeed()); 
} 

답변

4

이 정보를 쿼리 할 수는 없습니다. 인터넷 속도는 ISP가 결정하고 제어하며 네트워크 인터페이스 나 라우터는 제어하지 않습니다.

그래서 (현재) 연결 속도를 얻을 수있는 유일한 방법은 충분히 가까운 위치에서 파일을 다운로드하고 파일을 검색하는 데 걸리는 시간을 측정하는 것입니다. 예를 들어 : 전망이 좋은 수정시

static final String FILE_URL = "http://www.example.com/speedtest/file.bin"; 
static final long FILE_SIZE = 5 * 1024 * 8; // 5MB in Kilobits 

long mStart, mEnd; 
Context mContext; 
URL mUrl = new URL(FILE_URL); 
HttpURLConnection mCon = (HttpURLConnection)mUrl.openConnection(); 
mCon.setChunkedStreamingMode(0); 

if(mCon.getResponseCode() == HttpURLConnection.HTTP_OK) { 
    mStart = new Date().getTime(); 

    InputStream input = mCon.getInputStream(); 
    File f = new File(mContext.getDir("temp", Context.MODE_PRIVATE), "file.bin"); 
    FileOutputStream fo = new FileOutputStream(f); 
    int read_len = 0; 

    while((read_len = input.read(buffer)) > 0) { 
     fo.write(buffer, 0, read_len); 
    } 
    fo.close(); 
    mEnd = new Date().getTime(); 
    mCon.disconnect(); 

    return FILE_SIZE/((mEnd - mStart)/1000); 
} 

이 코드는 (당신이 mContext 유효한 상황 일 필요)와 AsyncTask 또는 작업자 스레드 내부에서 실행, 속도를 원격 파일을 다운로드 반환하는 파일의 Kbps로 다운로드되었습니다.

+0

ADSL 또는 3G와 같이 비대칭 인 경우 다운로드 속도와 업로드 속도가 다릅니다. – jww