(@ Паблоку, извините, этот ответ приходит так поздно, надеюсь, он все равно поможет)
Во-первых, если вы хотите получать статистику трафика для отдельных приложений, но только для 3G, использование публичных API невозможно. Android предоставляет TrafficStats.getUidTxBytes(int)
и TrafficStats.getUidRxBytes(int)
в качестве общедоступных API для получения общего количества байтов, используемых приложениями, но ничего (публичного) для разделения их по интерфейсу.
Предполагая, что это не разрушит ваш день, вот алгоритм псевдокода для того, как сделать остальное из того, что вы упомянули:
- При необходимости установите аварийный сигнал (используя
AlarmManager
) для начала вашего диапазона и сохраните эти значения (предположительно в БД). Причина: вам может потребоваться вычесть эти существующие значения TrafficStats
в качестве смещения, если они> 0 на момент начала диапазона дат.
- Также установите будильник в конце вашего диапазона.
- Создание
BroadcastReceiver
для получения ACTION_SHUTDOWN .
- В вашем
BroacastReceiver
запишите TrafficStats
для ваших приложений при завершении работы. Причина: TrafficStats
будет сбрасываться при каждой перезагрузке.
- Если это первое отключение с момента запуска: вычтите ваше начальное смещение и сохраните это окончательное значение (соблюдая осторожность, чтобы удалить начальное смещение)
- В противном случае указанное значение будет точным с момента загрузки.
- Как только сработает ваш сигнал окончания, запишите
TrafficStats
в этой точке и добавьте все ранее собранные статистические данные.
- (если каким-то образом телефон никогда не перезагружался между началом и концом, просто выполните endStats - startStats).
Удачи!