得到正在运行程序的uid和svm相关的参数

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];
    }
    
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值