testSVM.java:
package com.android.pangzi;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.lang.Math;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.TrafficStats;
import android.os.Bundle;
import android.util.Log;
public class TestSVM extends Activity {
PackageManager pm;
List<ApplicationData> mList = new ArrayList<ApplicationData>();
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
new Thread(new Runnable() {
@Override
public void run() {
getPacageInfo();
fillingData();
outputFile();
}
}).start();
}
private void outputFile() {
File file = new File("/sdcard/test.txt");
if(!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// FileOutputStream os = null;
FileWriter fw = null;
try {
fw = new FileWriter("/sdcard/test.txt",false);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// try {
// os = new FileOutputStream(file, true);
// } catch (FileNotFoundException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
for(int i = 0;i<6;i++) {
for(ApplicationData data:mList) {
String str = data.uid+" " + data.maxRx[i]+ " "+data.maxTx[i]+ " "+data.totalRx[i]+ " "+data.totalTx[i]+ " "+data.bizhi[i]+ " "+data.middleRx[i]+ " "+data.middleTx[i]+ " "+data.avgRx[i]+ " "+data.avgTx[i]+ " "+data.varianceRx[i]+ " "+data.varianceTx[i]+"\n";
try {
fw.write(str);
fw.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
fw.write("-----index="+i+"-----\n");
fw.flush();
Log.e("-------","--------finish");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private void fillingData() {
Log.e("...", "....listsize=" + mList.size());
// for (int i = 0; i < 3001; i++) {
for (ApplicationData data : mList) {
// Log.e("uid=" + data.uid, "rxb=" + data.uidRxbs[i] + "....."
// + "txb=" + data.uidTxbs[i]);
int countR = 0;
int indexR = 0;
long maxR = 0;
long rxtotal = 0;
int countT = 0;
int indexT = 0;
long maxT = 0;
long txtotal = 0;
for (int i = 0; i < data.uidRxbs.length - 1; i++) {
long between = data.uidRxbs[i + 1] - data.uidRxbs[i];
if (maxR < between) {
maxR = between;
}
rxtotal += between;
countR++;
if (countR == 250) {
data.middleRx[indexR] = between;
}
if (countR == 500) {
int mn;
float temp = 0;
data.totalRx[indexR] = rxtotal;
data.avgRx[indexR] = rxtotal / countR;
data.maxRx[indexR] = maxR;
for(mn = i; mn >= i-499; mn--) {
temp +=(data.uidRxbs[mn + 1] - data.uidRxbs[mn] - data.avgRx[indexR])*(data.uidRxbs[mn + 1] - data.uidRxbs[mn] - data.avgRx[indexR])*100;
}
data.varianceRx[indexR] = Math.sqrt(temp / 50);
rxtotal = 0;
countR = 0;
indexR++;
maxR = 0;
}
}
for (int i = 0; i < data.uidTxbs.length - 1; i++) {
long between = data.uidTxbs[i + 1] - data.uidTxbs[i];
if (maxT < between) {
maxT = between;
}
txtotal += between;
countT++;
if (countT == 250) {
data.middleTx[indexT] = between;
}
if (countT == 500) {
int mn;
double temp = 0;
data.totalTx[indexT] = txtotal;
data.avgTx[indexT] = txtotal / countT;
data.maxTx[indexT] = maxT;
data.bizhi[indexT] = txtotal==0?99999:data.totalRx[indexT] / txtotal;
for(mn = i; mn >= i-499; mn--) {
temp += (data.uidTxbs[mn + 1] - data.uidTxbs[mn] - data.avgTx[indexT]) * (data.uidTxbs[mn + 1] - data.uidTxbs[mn] - data.avgTx[indexT])*100;
}
data.varianceTx[indexT] = Math.sqrt(temp / 50);
txtotal = 0;
countT = 0;
indexT++;
maxT = 0;
}
}
}
// }
}
public long getUidRxBytes(int uid) {
return TrafficStats.getUidRxBytes(uid) == TrafficStats.UNSUPPORTED ? 0
: (TrafficStats.getUidRxBytes(uid) / 1024);
}
public long getUidTxBytes(int uid) {
return TrafficStats.getUidTxBytes(uid) == TrafficStats.UNSUPPORTED ? 0
: (TrafficStats.getUidTxBytes(uid) / 1024);
}
private void getPacageInfo() {
long rxb = 0;
long txb = 0;
List<Integer> uidList = getUids();
Log.e("....", "....uidlist.size" + uidList.size());
for (int i = 0; i < 3001; i++) {
for (int j = 0; j < uidList.size(); j++) {
ApplicationData data;
if (mList.size() > j) {
data = mList.get(j);
} else {
data = new ApplicationData();
data.uid = uidList.get(j);
mList.add(data);
//Log.e("..." + uidList.size(), "...." + j);
}
rxb = getUidRxBytes(uidList.get(j));
txb = getUidTxBytes(uidList.get(j));
Log.e("rxb=" + rxb, "txb=" + txb);
data.uidRxbs[i] = rxb;
data.uidTxbs[i] = txb;
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public List getUids() {
List<Integer> uidList = new ArrayList<Integer>();
pm = getPackageManager();
List<PackageInfo> packinfos = pm
.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES
| PackageManager.GET_PERMISSIONS);
for (PackageInfo info : packinfos) {
String[] premissions = info.requestedPermissions;
if (premissions != null && premissions.length > 0) {
for (String premission : premissions) {
if ("android.permission.INTERNET".equals(premission)) {
// System.out.println(info.packageName+"访问网络");
int uid = info.applicationInfo.uid;
Log.i("test", "uid = " + uid);
// String name = pm.getNameForUid(uid);
// // textName.setText(name);
// Log.i("test", "name = "+name);
uidList.add(uid);
}
}
}
}
return uidList;
}
}
application.java:
package com.android.pangzi;
public class ApplicationData {
public int uid;
// public long [] uidRxBytes;
// public long [] uidTxBytes;
public long [] uidRxbs;
public long [] uidTxbs;
public long [] maxRx;
public long [] maxTx;
public long [] avgRx;
public long [] avgTx;
public long [] middleRx;
public long [] middleTx;
public double [] varianceRx;
public double [] varianceTx;
public long []totalRx;
public long[]totalTx;
public float [] bizhi;
public ApplicationData() {
// uidRxBytes = new long[30000];
// uidTxBytes = new long[30000];
uidRxbs = new long [3001];
uidTxbs = new long [3001];
maxRx = new long[6];
maxTx = new long[6];
avgRx = new long[6];
avgTx = new long[6];
middleRx = new long [6];
middleTx = new long [6];
varianceRx = new double [6];
varianceTx = new double [6];
totalRx = new long[6];
totalTx = new long[6];
bizhi = new float [6];
}
}