Начать с последних полученных байтов TrafficStats

Привет, я создаю приложение для Android, которое будет контролировать потребление данных пользователем, пока что все идет хорошо. Но я попал в ловушку, я хотел бы сохранить последние использованные данные, а затем, когда они снова запустят службу, начнется с последних использованных данных и так далее.

Это мой класс обслуживания:

  //THIS METHOD IS CALLED EVERY 3 seconds to check for new DATA CONSUMED
  public void displayNotificationWIFI() {

sharedPreferences = getSharedPreferences(SHARED_PREF_WIFI, Context.MODE_PRIVATE);
    consumed = sharedPreferences.getString(WIFI_DATA_BYTES, null);

    //CHECK IF CONSUMED IS NULL, IF NULL GET NEW DATA CONSUMED
    if (consumed == null) {

        rxBytes = TrafficStats.getTotalRxBytes() - mStartRX;

        if (rxBytes >= 1024) {
            rxKB = rxBytes / 1024;
            received = String.format("%.0f", rxKB);
            unit = "KB";
            if (rxKB >= 1024) {
                DecimalFormat formatMB = new DecimalFormat("0.0");
                rxMB = rxKB / 1024;
                received = formatMB.format(rxMB);
                unit = "MB";
                if (rxMB >= 1024) {
                    DecimalFormat formatGB = new DecimalFormat("0.0");
                    rxGB = rxMB / 1024;
                    received = formatGB.format(rxGB);
                    unit = "GB";
                }
            }
            sharedPreferences = getSharedPreferences(SHARED_PREF_WIFI, Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.putString(WIFI_DATA_BYTES, String.valueOf(rxBytes));
            editor.putString(WIFI_DATA, received + " " + unit);
            editor.apply();
        }
    }

//SINCE NOT NULL, START FROM LAST DATA CONSUMED
        else {
        //STARTS FROM LAST DATA CONSUMED, BUT I THINK THIS IS WRONG?
        rxBytes = (TrafficStats.getTotalRxBytes() - mStartRX) + Double.parseDouble(consumed);

        if (rxBytes >= 1024) {
                rxKB = rxBytes / 1024;
                received = String.format("%.0f", rxKB);
                unit = "KB";

                if (rxKB >= 1024) {
                    DecimalFormat formatMB = new DecimalFormat("0.0");
                    rxMB = rxKB / 1024;
                    received = formatMB.format(rxMB);
                    unit = "MB";

                    if (rxMB >= 1024) {
                        DecimalFormat formatGB = new DecimalFormat("0.0");
                        rxGB = rxMB / 1024;
                        received = formatGB.format(rxGB);
                        unit = "GB";
                    }
                }
                //SAVING THE NEW LAST CONSUMED DATA
                sharedPreferences = getSharedPreferences(SHARED_PREF_WIFI,Context.MODE_PRIVATE);
                SharedPreferences.Editor editors = sharedPreferences.edit();
                editors.putString(WIFI_DATA_BYTES, String.valueOf(rxBytes));
                editors.apply();
            }
        }
        remoteView = new RemoteViews(getPackageName(), R.layout.custom_notification_pingwifi);
        remoteView.setTextViewText(R.id.txtData, received + " " + unit);

        NotificationCompat.Builder n = new NotificationCompat.Builder(serviceClass.this);
        n.setCustomContentView(remoteView)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setOngoing(true);

        notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        notificationManager.notify(0, n.build());
  }

Проблема с моим кодом заключается в том, что при повторном запуске службы. Старые данные просто добавляются вместе с новыми данными, и они просто добавляются, добавляются и не останавливаются, даже если я не пользуюсь Интернетом.

1 ответ

Создайте глобальную переменную int в вашем сервисе, куда ваше приложение отправляет и получает данные. На самом деле отправка данных и получение данных все считаются использованием данных. поэтому каждый раз, когда вы получаете сообщение, подсчитываете его байт, а каждый раз, когда вы отправляете данные, подсчитываете его так:

totalBytes +=numberOfSent
tatalBytes +=numberOfReceived

в конце разделите его на 10^6, тогда вы получите использование данных в мегабайтах.

удачи!

Другие вопросы по тегам