Android防火墙+流量统计代码

String infoToWrite = str;

//将字符串转换成byte数组写入文件

out.write(infoToWrite.getBytes());

//关闭文件file的OutputStream

out.close();

} catch (IOException e) {

//将出错信息打印到Logcat

}

package zy.dnh;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.widget.Toast;

public class getpowerinfo extends BroadcastReceiver{

FileOutputStream out;

final public String ONPATH = “/data/data/zy.dnh/on.txt”;

@Override

public void onReceive(Context context, Intent intent) {

// TODO Auto-generated method stub

if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){

Intent bootActivityIntent=new Intent(context,mService1.class);//启动服务

bootActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

writefile(“0,0,0,0,0,0,0,0,0,0,0,0”,ONPATH);

context.startService(bootActivityIntent);

Toast.makeText(context, “Netcounter service has been lauched”, Toast.LENGTH_LONG).show();

Api.applySavedIptablesRules(context, false);//应用防火墙规则

Toast.makeText(context, “Wall rules have been lauched”, Toast.LENGTH_LONG).show();

}

}

public void writefile(String str,String path )

{

File file;

try {

//创建文件

file = new File(path);

file.createNewFile();

//打开文件file的OutputStream

out = new FileOutputStream(file);

String infoToWrite = str;

//将字符串转换成byte数组写入文件

out.write(infoToWrite.getBytes());

//关闭文件file的OutputStream

out.close();

} catch (IOException e) {

//将出错信息打印到Logcat

}

mService1模块

后台服务,用于维护流量日志

view plaincopy to clipboardprint?

public class mService1 extends Service

{

private Handler objHandler = new Handler();

private int intCounter=0;

private int mHour;

private int mMinute;

private int mYear;

private int mMonth;

private int mDay;

private String mdate;

final public String DEV_FILE = “/proc/self/net/dev”;//系统流量文件

String[] ethdata={“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”};

String[] gprsdata={“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”};

String[] wifidata={“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”};

String data=“0,0,0,0,0,0,0,0,0,0,0,0”;//对应on.txt里面的格式

final String ETHLINE="  eth0";//以太网信息所在行

final String GPRSLINE=“rmnet0”;

final String WIFILINE=“tiwlan0”;

final String TEXT_ENCODING = “UTF-8”;

final public String ONPATH = “/data/data/zy.dnh/on.txt”;

final public String LOGPATH = “/data/data/zy.dnh/log.txt”;

private Runnable mTasks = new Runnable()

{

public void run()//运行该服务执行此函数

{

refresh();

intCounter++;

// DisplayToast(“Counter:”+Integer.toString(intCounter));

objHandler.postDelayed(mTasks, 30000);//每3000毫秒执行一次

}

};

@Override

public void onStart(Intent intent, int startId)

{

// TODO Auto-generated method stub

//writefile(“0,0,0,0,0,0,0,0,0,0,0,0”,ONPATH);//每次启动服务 初始化onpath

objHandler.postDelayed(mTasks, 0);

super.onStart(intent, startId);

}

@Override

public void onCreate()

{

// TODO Auto-generated method stub

super.onCreate();

}

@Override

public IBinder onBind(Intent intent)

{

// TODO Auto-generated method stub

return null;

}

@Override

public void onDestroy()

{

// TODO Auto-generated method stub

/*  */

objHandler.removeCallbacks(mTasks);

super.onDestroy();

}

public void DisplayToast(String str)

{

Toast.makeText(this,str,Toast.LENGTH_SHORT).show();

}

public void readdev()

{

FileReader fstream = null;

try {

fstream = new FileReader(DEV_FILE);

}

catch (FileNotFoundException e) {

DisplayToast("Could not read " + DEV_FILE);

}

BufferedReader in = new BufferedReader(fstream, 500);

String line;

String[] segs;

String[] netdata;

int count=0;

int k;

int j;

try {

while ((line = in.readLine()) != null) {

segs = line.trim().split(“:”);

if(line.startsWith(ETHLINE))

{

netdata=segs[1].trim().split(" ");

for(k=0,j=0;k<netdata.length;k++)

{

if(netdata[k].length()>0)

{

ethdata[j]=netdata[k];

j++;

}

}

}

else if(line.startsWith(GPRSLINE))

{

netdata=segs[1].trim().split(" ");

for(k=0,j=0;k<netdata.length;k++)

{

if(netdata[k].length()>0)

{

gprsdata[j]=netdata[k];

j++;

}

}

}

else if(line.startsWith(WIFILINE))

{

netdata=segs[1].trim().split(" ");

for(k=0,j=0;k<netdata.length;k++)

{

if(netdata[k].length()>0)

{

wifidata[j]=netdata[k];

j++;

}

}

}

count++;

}

fstream.close();

}

catch (IOException e) {

DisplayToast(e.toString());

}

}

public String getinfo(String path)

{

File file;

String str=“”;

FileInputStream in;

try{

//打开文件file的InputStream

file = new File(path);

in = new FileInputStream(file);

//将文件内容全部读入到byte数组

int length = (int)file.length();

byte[] temp = new byte[length];

in.read(temp, 0, length);

//将byte数组用UTF-8编码并存入display字符串中

str =  EncodingUtils.getString(temp,TEXT_ENCODING);

//关闭文件file的InputStream

in.close();

}

catch (IOException e) {

DisplayToast(e.toString());

}

return str;

}

public void writefile(String str,String path )

{

File file;

FileOutputStream out;

try {

//创建文件

file = new File(path);

file.createNewFile();

//打开文件file的OutputStream

out = new FileOutputStream(file);

String infoToWrite = str;

//将字符串转换成byte数组写入文件

out.write(infoToWrite.getBytes());

//关闭文件file的OutputStream

out.close();

} catch (IOException e) {

//将出错信息打印到Logcat

DisplayToast(e.toString());

}

}

public void refresh()

{

readdev();//读取本次开机之后直到当前系统的总流量

data=ethdata[0]+“,”+ethdata[1]+“,”+ethdata[8]+“,”+ethdata[9]+“,”

+gprsdata[0]+“,”+gprsdata[1]+“,”+gprsdata[8]+“,”+gprsdata[9]+“,”

+wifidata[0]+“,”+wifidata[1]+“,”+wifidata[8]+“,”+wifidata[9];

String onstr=getinfo(ONPATH);//读取on.txt记录到onstr里

String ondata[]=onstr.split(“,”);//将onstr各项分离 放到ondata里

//计算增量

int [] delta=new int [12];

delta[0]=Integer.parseInt(ethdata[0])-Integer.parseInt(ondata[0]);

delta[1]=Integer.parseInt(ethdata[1])-Integer.parseInt(ondata[1]);

delta[2]=Integer.parseInt(ethdata[8])-Integer.parseInt(ondata[2]);

delta[3]=Integer.parseInt(ethdata[9])-Integer.parseInt(ondata[3]);

delta[4]=Integer.parseInt(gprsdata[0])-Integer.parseInt(ondata[4]);

delta[5]=Integer.parseInt(gprsdata[1])-Integer.parseInt(ondata[5]);

delta[6]=Integer.parseInt(gprsdata[8])-Integer.parseInt(ondata[6]);

delta[7]=Integer.parseInt(gprsdata[9])-Integer.parseInt(ondata[7]);

delta[8]=Integer.parseInt(wifidata[0])-Integer.parseInt(ondata[8]);

delta[9]=Integer.parseInt(wifidata[1])-Integer.parseInt(ondata[9]);

delta[10]=Integer.parseInt(wifidata[8])-Integer.parseInt(ondata[10]);

delta[11]=Integer.parseInt(wifidata[9])-Integer.parseInt(ondata[11]);

//读取log.txt

//获取当前时间

final Calendar c = Calendar.getInstance();

mYear = c.get(Calendar.YEAR); //获取当前年份

mMonth = c.get(Calendar.MONTH)+1;//获取当前月份

mDay = c.get(Calendar.DAY_OF_MONTH);//获取当前月份的日期号码

mHour = c.get(Calendar.HOUR_OF_DAY);//获取当前的小时数

mMinute = c.get(Calendar.MINUTE);//获取当前的分钟数

mdate=mYear+“-”+mMonth+“-”+mDay;

String text=getinfo(LOGPATH);//将log.txt的内容读到text字符串中

String [] line=text.split(“/n”);

String today=line[line.length-1];//获得今日已记录流量

String [] beToday=today.split(“,”);

//检查文件最后一行是否为今天的流量记录信息

if(!beToday[0].equals(mdate))//

//判断今日流量是否已经记录,如果今日流量没有记录

{

text=text+mdate+“,0,0,0,0,0,0,0,0,0,0,0,0/n”;

writefile(text,LOGPATH);

line=text.split(“/n”);

today=line[line.length-1];//获得今日已记录流量

beToday=today.split(“,”);

}

int i;

//处理今日流量

int [] newTodaydata=new int [12];//表示今日流量

String newtoday=mdate;

for(i=0;i<=11;i++)//更新今日流量

{

newTodaydata[i]=Integer.parseInt(beToday[i+1])+delta[i];

newtoday=newtoday+“,”+newTodaydata[i];

}

newtoday=newtoday+“/n”;

String [] beTotal=line[0].split(“,”);

int [] newTotaldata=new int [12];//表示总流量数值

//更新第一行

String newtotal=“total”;

for(i=0;i<=11;i++)//更新今日流量和总流量

{

newTotaldata[i]=Integer.parseInt(beTotal[i+1])+delta[i];//总流量数值+delta[i]更新

newtotal=newtotal+“,”+newTotaldata[i];

}

newtotal= newtotal+“/n”;

//处理中间不变的部分

String before=“”;//before为之前的从第1行到昨天的流量记录

for(i=1;i<=line.length-2;i++)

before=before+line[i]+“/n”;//代表中间不变的部分

String newlog=newtotal+before+newtoday;

writefile(data,ONPATH);//更新流量记录

writefile(newlog,LOGPATH);//更新log*/

}

}

public class mService1 extends Service

{

private Handler objHandler = new Handler();

private int intCounter=0;

private int mHour;

private int mMinute;

private int mYear;

private int mMonth;

private int mDay;

private String mdate;

final public String DEV_FILE = “/proc/self/net/dev”;//系统流量文件

String[] ethdata={“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”};

String[] gprsdata={“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”};

String[] wifidata={“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”,“0”};

String data=“0,0,0,0,0,0,0,0,0,0,0,0”;//对应on.txt里面的格式

final String ETHLINE="  eth0";//以太网信息所在行

final String GPRSLINE=“rmnet0”;

final String WIFILINE=“tiwlan0”;

final String TEXT_ENCODING = “UTF-8”;

final public String ONPATH = “/data/data/zy.dnh/on.txt”;

final public String LOGPATH = “/data/data/zy.dnh/log.txt”;

private Runnable mTasks = new Runnable()

{

public void run()//运行该服务执行此函数

{

refresh();

intCounter++;

// DisplayToast(“Counter:”+Integer.toString(intCounter));

objHandler.postDelayed(mTasks, 30000);//每3000毫秒执行一次

}

};

@Override

public void onStart(Intent intent, int startId)

{

// TODO Auto-generated method stub

//writefile(“0,0,0,0,0,0,0,0,0,0,0,0”,ONPATH);//每次启动服务 初始化onpath

objHandler.postDelayed(mTasks, 0);

super.onStart(intent, startId);

}

@Override

public void onCreate()

{

// TODO Auto-generated method stub

super.onCreate();

}

@Override

public IBinder onBind(Intent intent)

{

// TODO Auto-generated method stub

return null;

}

@Override

public void onDestroy()

{

// TODO Auto-generated method stub

/*  */

objHandler.removeCallbacks(mTasks);

super.onDestroy();

}

public void DisplayToast(String str)

{

Toast.makeText(this,str,Toast.LENGTH_SHORT).show();

}

public void readdev()

{

FileReader fstream = null;

try {

fstream = new FileReader(DEV_FILE);

}

catch (FileNotFoundException e) {

DisplayToast("Could not read " + DEV_FILE);

}

BufferedReader in = new BufferedReader(fstream, 500);

String line;

String[] segs;

String[] netdata;

int count=0;

int k;

int j;

try {

while ((line = in.readLine()) != null) {

segs = line.trim().split(“:”);

if(line.startsWith(ETHLINE))

{

netdata=segs[1].trim().split(" ");

for(k=0,j=0;k<netdata.length;k++)

{

if(netdata[k].length()>0)

{

ethdata[j]=netdata[k];

j++;

}

}

}

else if(line.startsWith(GPRSLINE))

{

netdata=segs[1].trim().split(" ");

for(k=0,j=0;k<netdata.length;k++)

{

if(netdata[k].length()>0)

{

gprsdata[j]=netdata[k];

j++;

}

}

}

else if(line.startsWith(WIFILINE))

{

netdata=segs[1].trim().split(" ");

for(k=0,j=0;k<netdata.length;k++)

{

if(netdata[k].length()>0)

{

wifidata[j]=netdata[k];

j++;

}

}

}

count++;

}

fstream.close();

}

catch (IOException e) {

DisplayToast(e.toString());

}

}

public String getinfo(String path)

{

File file;

String str=“”;

FileInputStream in;

try{

//打开文件file的InputStream

file = new File(path);

in = new FileInputStream(file);

//将文件内容全部读入到byte数组

int length = (int)file.length();

byte[] temp = new byte[length];

in.read(temp, 0, length);

//将byte数组用UTF-8编码并存入display字符串中

str =  EncodingUtils.getString(temp,TEXT_ENCODING);

//关闭文件file的InputStream

in.close();

}

catch (IOException e) {

DisplayToast(e.toString());

}

return str;

}

public void writefile(String str,String path )

{

File file;

FileOutputStream out;

try {

//创建文件

file = new File(path);

file.createNewFile();

//打开文件file的OutputStream

out = new FileOutputStream(file);

String infoToWrite = str;

//将字符串转换成byte数组写入文件

out.write(infoToWrite.getBytes());

//关闭文件file的OutputStream

out.close();

} catch (IOException e) {

//将出错信息打印到Logcat

DisplayToast(e.toString());

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后

光有这些思路和搞懂单个知识的应用是还远远不够的,在Android开源框架设计思想中的知识点还是比较多的,想要搞懂还得学会整理和规划:我们常见的**Android热修复框架、插件化框架、组件化框架、图片加载框架、网络访问框架、RxJava响应式编程框架、IOC依赖注入框架、最近架构组件Jetpack等等Android第三方开源框架,**这些都是属于Android开源框架设计思想的。如下图所示:

image

这位阿里P8大佬针对以上知识点,熬夜整理出了一本长达1042页的完整版如何解读开源框架设计思想PDF文档,内容详细,把Android热修复框架、插件化框架、组件化框架、图片加载框架、网络访问框架、RxJava响应式编程框架、IOC依赖注入框架、最近架构组件Jetpack等等Android第三方开源框架这些知识点从源码分析到实战应用都讲的简单明了。

由于文档内容过多,篇幅受限,只能截图展示部分

image

image

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断!!!

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

…(img-cb7qCURW-1713285587483)]

[外链图片转存中…(img-NKIWRd12-1713285587484)]

[外链图片转存中…(img-ac9srQXT-1713285587485)]

[外链图片转存中…(img-q8AJYVjP-1713285587486)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后

光有这些思路和搞懂单个知识的应用是还远远不够的,在Android开源框架设计思想中的知识点还是比较多的,想要搞懂还得学会整理和规划:我们常见的**Android热修复框架、插件化框架、组件化框架、图片加载框架、网络访问框架、RxJava响应式编程框架、IOC依赖注入框架、最近架构组件Jetpack等等Android第三方开源框架,**这些都是属于Android开源框架设计思想的。如下图所示:

[外链图片转存中…(img-b5TCb2rN-1713285587487)]

这位阿里P8大佬针对以上知识点,熬夜整理出了一本长达1042页的完整版如何解读开源框架设计思想PDF文档,内容详细,把Android热修复框架、插件化框架、组件化框架、图片加载框架、网络访问框架、RxJava响应式编程框架、IOC依赖注入框架、最近架构组件Jetpack等等Android第三方开源框架这些知识点从源码分析到实战应用都讲的简单明了。

由于文档内容过多,篇幅受限,只能截图展示部分

[外链图片转存中…(img-cUC5hDhL-1713285587488)]

[外链图片转存中…(img-IhmoYZGw-1713285587489)]

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断!!!

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 23
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值