- 浏览: 81769 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
lijh:
[*][url][/url][flash=200,200][/ ...
Android拦截HOME按键 -
ccnu_ouy520:
有人能详细一点吗?
如何获取Android手机中所有的短信 -
ccnu_ouy520:
写的挺好的,我也看了这篇文章 有几个问题
这个getCont ...
如何获取Android手机中所有的短信 -
guobosheng:
楼主,我只想拦截home键,不想屏蔽它,要怎么改啊?
Android拦截HOME按键 -
aking86:
latty 写道不知 你为何屏蔽Home键?解决什么方面的问题 ...
Android拦截HOME按键
参考: http://www.2cto.com/kf/201109/102970.html
android手机流量信息系统是LINUX内核 记录在/proc/self/net/dev文件里面
我们可以看看dev文件的格式
写道
C:\>adb shell cat /proc/net/dev
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
lo: 2268 34 0 0 0 0 0 0 2268 34 0 0 0 0 0 0
eth0: 1556548 19773 0 0 0 0 0 0 2620154 17233 0 0 0 0 0 0
tunl0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
gre0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
C:\>
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
lo: 2268 34 0 0 0 0 0 0 2268 34 0 0 0 0 0 0
eth0: 1556548 19773 0 0 0 0 0 0 2620154 17233 0 0 0 0 0 0
tunl0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
gre0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
C:\>
我们要获取流量可以通过这个文件进行读取
读取的源代码如下
代码 写道
package com.aking86.test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.util.Calendar;
import org.apache.http.util.EncodingUtils;
import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.widget.Toast;
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";// eth是以太网信息 tiwlan0 是 Wifi rmnet0 是 GPRS
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, 3000);// 每3000毫秒执行一次
}
};
@Override
public void onStart(Intent intent, int startId) {
objHandler.postDelayed(mTasks, 0);
super.onStart(intent, startId);
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
/* */
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*/
}
}
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.util.Calendar;
import org.apache.http.util.EncodingUtils;
import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.widget.Toast;
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";// eth是以太网信息 tiwlan0 是 Wifi rmnet0 是 GPRS
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, 3000);// 每3000毫秒执行一次
}
};
@Override
public void onStart(Intent intent, int startId) {
objHandler.postDelayed(mTasks, 0);
super.onStart(intent, startId);
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
/* */
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*/
}
}
发表评论
-
demo-tel
2013-01-21 00:18 0Demo-Tel PhoneStateListener ... -
mobile
2012-12-21 01:21 0mobile -
android学习笔记之Base64编码
2012-12-10 23:31 0Base64 http://blog.sina.com. ... -
Android中对图像进行Base64编码
2012-12-10 23:22 0Android中对图像进行Base64 ... -
android中json转换成List<Map>
2012-11-20 01:07 0android中json转换成List<Map&g ... -
android自定义控件
2012-10-24 00:41 3780自定义控件 TitleBar 实现步骤: 1.先写好 ... -
ratingBar demo
2012-10-18 23:54 1545关于 ratingBar 参考 资料写的demo ht ... -
android 屏幕保持唤醒
2012-10-09 22:41 0android 屏幕保持唤醒 http://www.cnb ... -
Android系统在超级终端下必会的命令大全
2012-10-05 11:09 1289[教程] Android系统在超级终端下必会的命令大全 ... -
360
2012-07-18 23:35 0写道 package org.android; ... -
android工具箱
2012-04-08 23:40 0android工具箱 -
droiddraw 21 布局工具
2012-03-28 23:17 0droiddraw 21 布局工具 -
Android通讯录
2012-03-26 00:29 0下面展示一段在Android1.5上读取手机通讯录的代码1 ... -
viewPager
2012-03-21 06:12 1993ViewPager MainActivity ... -
android应酬资料
2012-03-15 01:28 891android面试资料。收集的 ... -
android 资料
2012-03-15 01:08 12611.view如何刷新?简述什么是双缓冲?andro ... -
android杀进程方法
2012-02-29 01:15 2142android杀进程方法 源文: http://www.cn ... -
android手机设置自己喜欢的铃声
2012-02-26 18:51 2073存放手机铃声的的路径(三星 I8150 手机): /sys ... -
如何删除android手机自带的系统程序
2012-02-24 00:23 2620操作步骤: 工具准备: DooMLoRD , (Sup ... -
Android Mms 源码结构
2012-02-20 01:12 2338Android Mms 源码结构 源文:http:// ...
相关推荐
Android_获取进程的上下行流量。
1.Android官方6.0之后推出的API网络太类 NetworkStatsManager 介绍 2.统计查询方法(UID单个应用,所有应用) 3.统计过程中的发现的坑以及解决方案 4.博客:北极的松树
移动通信卡的android手机查话费,流量,短信。
Android中获取GSM、CDMA、Wifi信号强度。 Android中获取GSM、CDMA、Wifi信号强度
首先感谢原作者,我也是从网上下载代码片段,然后写了个demo,界面上可以直观的看到网络的流量监控。 1.文件为源码,解压后...2.可以直接用在项目里,根据需要获取其他的网络流量信息。 再次感谢原作者!支持开源!
显示出每个程序wifi和3g/2g 访问的上传和下载的流量,帮助用户了解程序产生的流量信息. 漫游管理. 当检查到手机处于漫游状态时会提示用户。 手机杀毒:从服务器下载最新的病毒库, 根据程序的包名和程序的数字签名识别...
Android应用源码可以按时间段查询的流量统计项目
二手商城手机客户端是一款基于android,iphone、ipod touch平台的网络购物软件,不仅具有下单、查询订单、搜索商品、产品评价等常用功能,订单提醒等特色功能。 而且还可以在线支付,选择货到付款,产品分享等诸多...
可监听当前app的上传流量(下载流量的相关数据里面有获取的方法,可自行实现),获取实时的上传进度与速度,代码封装完整,调用简单,无外在关联。 2.进度条按钮: 既是按钮又是进度条,点击开始上传的时候,可以调用...
这是demo是android 通讯录,获取联系人的头像,姓名,手机号码,添加联系人;以及修改手机的声音;手机的实时流量
Android 2.2 版本以前的系统的流量信息都存放在 proc/net/dev(或者 proc/self/net/dev)文件下,读取文件然后对其进行解析就行了。读取某一个应用的流量,则读取proc/uid_stat/uid /tcp_rcv 文件进行解析(注:...
k -i - 特征: 无需root即可捕获应用流量借助集成的HTTP服务器,轻松下载PCAP文件将UDP上的PCAP流式传输到远程接收器显示捕获的流量实时统计信息应用过滤器以仅捕获所选应用程序的流量获取活动的连接详细信息,包括...
电脑没有无线网卡,家里没有无线路由器,公司没有wifi网络时却又想让手机不耗流量上网,畅玩手机网游怎么办?Android Reverse Tethering是个不错的选择!轻松通过一条USB线帮助手机上网! 首先请注意:* C9 f6 d$ R...
这是一个手机端的APP,作用是对手机中的短信、通话和流量的使用进行分析,然后绘制柱状图,从柱状图上可以分析出哪个时段的短信数量、通话数量、通话时间,通话频数、流量使用情况等综合分析,然后给你个人的情况给...
Android Android Android Android 手机新概念 操作系统的选择 -------- 定制和长尾 � 重构 � MVC 和 Web APP 架构 Android Android Android Android 开发背景 � 计算技术、无线接入技术的发展,使嵌入式系统逐渐...
网上那个有bug,这个是我修改的。喜欢的可以下
电脑没有无线网卡,家里没有无线路由器,公司没有wifi网络时却又想让手机不耗流量上网,畅玩手机网游怎么办?Android Reverse Tethering是个不错的选择!轻松通过一条USB线帮助手机上网! 首先请注意:* C9 f6 d$ R...
另外为了保护隐私项目监控了发送短信、读取联系人数据、读取通话记录、获取您当前位置、获得IMEI号码、获得ROOT权限、监听来电状态、读取短消息内容等8项敏感权限的监控并且记录在本地SQLite数据库中,项目需要ROOT...
在移动应用中,我们一般将网络图片分为三个级别,第一级别是网络层,即根据图片的url地址可以找到服务器上相应图片,获取这一层的图片会消耗流量,所以我们希望可以获取后本地就永久使用,所以就会有接下来的缓存...