2016-05-19 22 views
4

私はAndroid 6.0用のアプリケーションを作成しています。新しいクラスのNetworkStatsManagerを使用して、モバイルデータの使用を取得したいと考えています。Androidモバイルの使用履歴NetworkStatsManager

私はマニフェストに必要なすべての権限を追加し、アクセス許可の実行が必要です。

bucket = networkStatsManager.querySummaryForDevice(ConnectivityManager.TYPE_WIFI, "", fromDate.getTime(), toDate.getTime()); 

リターンWIFIの使用のための正しい値:私はメソッドを呼び出す

しかし、私はTYPE_MOBILEでTYPE_WIFIを交換する場合、結果は常に0

NetworkStats.Bucket bucket = null; 
    try { 
     bucket = networkStatsManager.querySummaryForDevice(ConnectivityManager.TYPE_MOBILE, "", fromDate.getTime(), toDate.getTime()); 

     if(bucket == null){ 
      Log.i("Info", "Error"); 
     }else{ 
      Log.i("Info", "Total: " + (bucket.getRxBytes() + bucket.getTxBytes())); 
     } 

    } catch (RemoteException e) { 
     e.printStackTrace(); 
    } 

答えて

7

である私は隠されたAPI(android statistic 3g traffic for each APP, how?)でこの問題の解決策を見つけたとTYPE_MOBILEでモバイルデータ使用情報を取得しようとしたときには必要でした私が情報TYPE WIFIを取得しようとしたときとは異なり、SubscriberIDに通知する。

あなたがTYPE_MOBILEを使用しているときに有効な - サブスクライバを使用するのは、それが必要だ

TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); 
    String subscriberID = tm.getSubscriberId(); 

    NetworkStats networkStatsByApp = networkStatsManager.queryDetailsForUid(ConnectivityManager.TYPE_MOBILE, subscriberID, start, end, uid); 

このコードを試してみてください。

+0

答えとしてコードを投稿しないでください...少なくとも答え/コードを少し説明してください。 – thepio

+1

申し訳ありませんが、私は解決策に関する詳細情報を追加しました。 –

+0

はい、subscriberIDが動作しています:) –