2016-10-14 19 views
5

나는 이것을 많이 연구했다. 부분적으로 목적을 해결하는 동일한 코드를 모든 곳에서 발견했습니다. API 설명서에 따르면 장치가 다시 시작되면 카운터가 재설정됩니다. 때로는 카운터를 다시 시작하지 않고도 재설정됩니다. 아래의 코드1 개월 동안 GPRS 모바일 데이터 사용법을 얻으려면 어떻게해야합니까?

float totalRxBytes = (float)TrafficStats.getTotalRxBytes()/(float)1048576; // Received 
float totalTxBytes = (float)TrafficStats.getTotalTxBytes()/(float)1048576; // Sent 
float mobRxBytes = (float)TrafficStats.getMobileRxBytes()/(float)1048576; 
float mobTxBytes = (float)TrafficStats.getMobileTxBytes()/(float)1048576; 
float wifiRxBytes = totalRxBytes - mobRxBytes; 
float wifiTxBytes = totalTxBytes - mobTxBytes; 

이다 그러나 나는 특정 날짜 또는 한 달 동안이 데이터를 가지고 할 수있는 방법을 알아낼 수 있을까? 도와주세요. 어떤 포인터도 감사 할 것입니다. 감사합니다. . 모든

+0

어떤 포인터를 사용 하시겠습니까? – Bharat

+0

여기에서 답변을 찾을 수 있습니다. http://stackoverflow.com/a/7640565/6689101 – zombie

답변

4

첫째, TrafficStats.getTotalRxPackets() : 장치 부팅 이후 수신 된 패킷의

반환 번호.

동일 TrafficStats.getTotalTxPackets()

이 클래스 함께 달 통계를 얻기 위해 도움이되지 않습니다.

나는 API 23에서 작업 솔루션을 권합니다 :

NetworkStatsManager

이 클래스는 디바이스 별 또는 패키지 당 통계를 얻을 수있는 가능성을 가지고있다. 특히 도움이 될 것를위한 기능 : 넷째 있었던 파라미터로 세 번째 매개 변수 및 종료 시간으로 시작 시간을 측정하는 기대

NetworkStatsManager.querySummaryForDevice()

.

샘플 프로젝트는 here입니다. 적절한 런타임 권한을 요구하는 NetworkStatsManager에 대한 액세스 권한을 얻는 방법을 보여줍니다.

이 솔루션은 API 23 이상입니다.

TrafficStats을 사용하려면 매시간 TrafficStats.getTotalRxPackets()의 결과를 얻을 수있는 서비스를 만들고 차이를 계산하여 하루에 다른 행에 데이터베이스에 저장하십시오.

+0

Hello Zag, 감사합니다. 나는 대답은 유용하며 같은 것을 구현하려고합니다. – Bharat

+0

나는 1 개의 문제에 직면하고 있으며 아직 해결할 수 없었다. 오류 : "java.lang.RuntimeException : java.lang.SecurityException : NetworkStats : 사용자 10053도 현재 프로세스에 android.permission.READ_NETWORK_USAGE_HISTORY"이 없습니다. 나는 API 23에서 이것을 구현하고있다.이 API는 허가를 얻기 위해 런타임 보안 구현을하고 있는데, 나는 당신이 내가 말하고자하는 것을 이해하기를 희망한다. Manifest에 android.permission.READ_NETWORK_USAGE_HISTORY를 추가 할 수 있었지만 컴파일 오류가 발생하여 Java 파일에서 동일한 권한을 추가 할 수 없습니다. 도와 주실 수 있겠습니까? – Bharat

+0

[샘플 프로젝트] (https://github.com/RobertZagorski/NetworkStats)를보십시오. 특히'AndroidManifest.xml'과'MainActivity'에 그것을 묻고 그것을 사용하는 방법을 설명합니다. –

0

나는 R. Zagorski와 동의하지만 나는 다른 접근법을 염두에두고 있습니다.

TrafficStats을 사용하여 수신/전송 된 패킷의 양을 뺀 다음 마지막 양을 SharedPreferences과 마지막 양과 함께 저장하십시오. 이제 장치 재시작을 처리하려면 항상 마지막 카운트가 현재 양보다 큰지 확인하십시오. 예인 경우 마지막 금액을 0으로 재설정하십시오. 또한 월 시작일을 추적하십시오. 월이 끝나면 카운트를 0으로 재설정하는 것을 잊지 마십시오!

지난 달 수를 추적하려면 목록을 사용하십시오. 월이 끝나면 배열에 총 금액을 월 번호 색인에 추가합니다. 또한 첫 번째 인덱스는 0이 아니라 1입니다. 따라서 목록을 쿼리하는 데 월 번호를 직접 사용할 수 있으려면 배열을 1 값만큼 오프셋해야합니다.

이것은 TrafficStats의 최소값 인 API 레벨 8에서 사용할 수있는 R. Zagorski의 아이디어 (상당히 좋습니다)보다 이점이 있습니다.

희망 도우미 :