На Android / Java сколько байтов загружено соединение? - PullRequest
2 голосов
/ 16 февраля 2010

Android-приложение, которое я пишу, включает в себя довольно много загрузки контента (например, podcatcher / RSS).

Я хотел бы иметь возможность указать пользователю, сколько байт они скачали, чтобы они могли принять решение, хотят они использовать Wi-Fi или нет.

Для этого я нашел способ подсчитать количество байтов , прочитанных приложением, обернув InputStream в простой CountingInputStream.

Однако это не учитывает базовые вещи, такие как заголовки пакетов и заголовки HTTP. Что еще более важно, это не принимает во внимание любое сжатие, с которым контент может быть закодирован.

Итак, сколько байт мое приложение загрузило по сети ? Меня не интересует количество загруженных байтов, но если знаете, не стесняйтесь.

Я пошел по довольно низкоуровневому подходу, поскольку я подаю поток ввода в XML PullParser. Мне также понадобится выполнить аналогичное упражнение с сбросом байтов (в данном случае изображений) прямо на SD-карту.

Это лучший подход? Чего мне не хватает?

Ответы [ 4 ]

1 голос
/ 16 февраля 2010

Это не прямой ответ, но вы можете попробовать спросить кого-то, кто уже решил подобную проблему, например, приложение счетчика данных. Я использовал NetCounter от Cyril Jaquier (http://www.jaqpot.net/netcounter/),), и он утверждает, что его программное обеспечение имеет открытый исходный код. Мне не удалось заставить его ссылку для скачивания работать, но есть контактный адрес электронной почты. должен иметь возможность использовать тот же метод, что и он.

1 голос
/ 17 ноября 2010

Как я знаю, существует два способа подсчета трафика данных. Один из них - / sys / class / net / {interface} / statistics, как упоминалось в приложении для Android с именем netCounter, другой - / proc / net / dev, который используется в приложении для Android с именем wifi-tether. Но я не знаю разницы между этими двумя методами и не лучше.

1 голос
/ 16 февраля 2010

уффф ... Я думаю, что это довольно прозрачно для базового протокола, поэтому вы не можете сосчитать все эти байты, используемые в сеансе или канальном уровне, и операторам нравится взимать плату даже за управляющие байты, которые никоим образом не видны конечный пользователь. Кроме того, они учитывают трафик в обоих направлениях (ваш запрос на сервер также занимает некоторое время), поэтому - хороший вопрос: как измерить необходимый трафик / деньги для загрузки этой картинки ...?

0 голосов
/ 19 января 2013

Количество байтов, полученных конкретным приложением, хранится в / proc / uid_stat // tcp_rcv, где app_uid - это идентификатор вашего приложения на определенном устройстве.

...