本文将介绍使用Tasker制作一个简单的流量插件,插件能够自动判断当前的网络类型(WIFI/移动网络),并精确显示当前网络的上行和下行流量信息。

data usage notify

显示WIFI网络和手机网络的流量信息简单演示:

wifi data

mobile data

原理

如果在Android系统执行下面一条shell:

1
2
# 查看网络信息
busybox ifconfig

我们可以得到类似以下的输出结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
eth0      Link encap:Ethernet  HWaddr 88:30:8A:5F:E8:96    
inet addr:192.168.1.101 Bcast:255.255.255.255 Mask:255.255.255.0
inet6 addr: fe80::8a30:8aff:fe5f:e896/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2185 errors:0 dropped:58 overruns:0 frame:0
TX packets:2131 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1278033 (1.2 MiB) TX bytes:907559 (886.2 KiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:566 errors:0 dropped:0 overruns:0 frame:0
TX packets:566 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:112686 (110.0 KiB) TX bytes:112686 (110.0 KiB)

从上面的输出我们可以看到ech0网卡信息的最后一句里有详细的RX信息和TX信息,我们可以通过一些简单的shell命令提取并重新整合成我们需要的形式。

上面只有WIFI网卡的信息和本机回环的信息,如果需要移动网络的信息,我们可以在命令后面加上移动网卡的参数:

1
2
#获取网卡信息
busybox ifconfig rmnet0

命令执行后输出的信息:

rmnet0    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00    
          inet addr:10.109.155.102  P-t-P:10.109.155.102  Mask:255.255.255.255  
          POINTOPOINT NOARP  MTU:1500  Metric:1  
          RX packets:2527 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:2979 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:1000   
          RX bytes:1845666 (1.7 MiB)  TX bytes:364713 (356.1 KiB)

我们可以使用同样的方法取RX和TX信息。

最后就是判断当前连接的网络了,如果是WIFI网络就显示WIFI的流量信息,如果是移动网络就显示移动网络的流量信息。歉意使用Tasker对”%WIFII”变量做简单的正则匹配就可以做到了。

最后配置一个Task,将上面的信息整合传到Minimalistic Text显示就可以了。配置文件下载: data_usage.tsk v2,下载完成后在Tasker的Task标签导入。

data usage task

Minimalistic Text 的配置

新建一个3X1的插件,增加一个本地变量,变量名称为”%DDU”,如下图:

add variable

最后配置一下显示的更新,我们设定每次点击插件时更新流量信息,所以要在MT的点击动作里让Tasker运行更新任务。MT的完整配置下载: data_usage_display,下载后在MT的挂件列表里导入即可。