4

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

マニフェストに必要なすべての権限を追加し、権限のランタイムを必要とします。

メソッドを呼び出すと:

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

WIFI の使用に適した値を返します。

しかし、TYPE_WIFI を TYPE_MOBILE に置き換えると、結果は常に 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();
    }
4

3 に答える 3

8

この問題の解決策は、非表示の API (アプリごとの Android 統計 3g トラフィック、どのように? ) で見つかりました。また、TYPE_MOBILE でモバイル データの使用情報を取得しようとすると、TYPE WIFI の情報を取得しようとしたときとは異なり、SubscriberID を通知する必要がありました。

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

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

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

したがって、TYPE_MOBILE を使用している場合は、有効な購読者 ID を使用する必要があります。

于 2016-05-31T18:58:04.857 に答える