`
wiseideal
  • 浏览: 443825 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

读取手机硬件软件信息以及流量统计的类

阅读更多
可以读取手机的cpu 内存 键盘类型 导航方式 以及安装的软件列表等
附带流量查询方法
这个方法对手机的负荷较大 可以考虑放在后台执行
引用

public class PhoneInfoUtil {
Context context;
PhoneInfo pInfo;
WindowManager wm;
Activity activity;
final public String DEV_FILE = "/proc/self/net/dev";// 系统流量文件
final String GPRSLINE = "rmnet0";
String[] gprsdata = { "0", "0", "0", "0", "0", "0", "0", "0", "0", "0",
"0", "0", "0", "0", "0", "0" };
public PhoneInfoUtil(Activity activity,PhoneInfo pinfo){
this.context=activity.getApplicationContext();
this.wm=activity.getWindowManager();
this.activity=activity;
fetch_info(pinfo);//linux方式获得
fetch_tel_status(pinfo);//android API方式获得


}
/**
* linux版本 cpu信息 mem信息
* @param pInfo
*/
  public void fetch_info(PhoneInfo pInfo) {
    String linuxInfo = null;
    String memInfo = null;
    String cpuInfo = null;
    CMDExecute cmdexe = new CMDExecute ( );
    try {
    String[ ] linuxargs = {"/system/bin/cat", "/proc/version" };
    linuxInfo = cmdexe.run(linuxargs, "system/bin/");
    String[] cpuargs = {"/system/bin/cat", "/proc/cpuinfo"};
    cpuInfo = cmdexe.run(cpuargs, "/system/bin/");
    String[] memargs = {"/system/bin/cat", "/proc/meminfo"};
    memInfo = cmdexe.run(cpuargs, "/system/bin/");
   
    } catch (IOException ex) {
    ex.printStackTrace( );
    }
    pInfo.setLinuxInfo(linuxInfo);
    pInfo.setCpuInfo(cpuInfo);
    pInfo.setMemInfo(memInfo);
    }
   
    public void fetch_tel_status(PhoneInfo pInfo) {
    String result = null;
    String networktype = null;
    String phoneType = null;
    String keyType = null;
    String navigationType = null;
   
    TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);//
    String str = " ";
    //串号IMEI
    pInfo.setIMEI(tm.getDeviceId());
    //串号版本
    pInfo.setIMEI_ver(tm.getDeviceSoftwareVersion());
    //联网类型
    switch(tm.getNetworkType()){
    case TelephonyManager.NETWORK_TYPE_EDGE:
    networktype="EDGE";break;
    case TelephonyManager.NETWORK_TYPE_GPRS:
    networktype="GPRS";
    case TelephonyManager.NETWORK_TYPE_UMTS:
    networktype="UMTS";
    default :
    networktype="UNKNOWN";break;
    }
    pInfo.setNetworktype(networktype);
    //手机网络类型
    switch(tm.getPhoneType()){
    case TelephonyManager.PHONE_TYPE_GSM:
    phoneType="GSM";break;
    case TelephonyManager.PHONE_TYPE_NONE:
    phoneType="NONE";break;
    default:
    phoneType="UNKNOWN";break;
    }
    pInfo.setPhoneType(phoneType);
   
    //键盘类型
    switch(context.getResources().getConfiguration().keyboard){
    case 0:
    keyType="KEYBOARD_UNDEFINED";break;
    case 1:
    keyType="KEYBOARD_NOKEYS";break;
    case 2:
    keyType="KEYBOARD_QWERTY";break;
    case 3:
    keyType="KEYBOARD_12KEY";break;
    }
    pInfo.setKeyType(keyType);
    //导航方式
    switch(context.getResources().getConfiguration().navigation){
    case 0:
    navigationType="NAVIGATION_UNDEFINED";break;
    case 1:
    navigationType="NAVIGATION_NONAV";break;
    case 2:
    navigationType="NAVIGATION_DPAD";break;
    case 3:
    navigationType="NAVIGATION_TRACKBALL";break;
    }
    pInfo.setNavigationType(navigationType);
    //系统版本
    int version = 0;
    try{
    version = Integer.valueOf(android.os.Build.VERSION.SDK);
    }catch(NumberFormatException e){
    e.printStackTrace();
    }
    switch(version){
    case 1:
    pInfo.setSystemInfo(android.os.Build.MODEL+" : "+"1.0");break;
    case 2:
    pInfo.setSystemInfo(android.os.Build.MODEL+" : "+"1.1");break;
    case 3:
    pInfo.setSystemInfo(android.os.Build.MODEL+" : "+"1.5");break;
    case 4:
    pInfo.setSystemInfo(android.os.Build.MODEL+" : "+"1.6");break;
    case 5:
    pInfo.setSystemInfo(android.os.Build.MODEL+" : "+"2.0");break;
    case 6:
    pInfo.setSystemInfo(android.os.Build.MODEL+" : "+"2.0.1");break;
    case 7:
    pInfo.setSystemInfo(android.os.Build.MODEL+" : "+"2.1");break;
    case 8:
    pInfo.setSystemInfo(android.os.Build.MODEL+" : "+"2.2");break;
    case 9:
    pInfo.setSystemInfo(android.os.Build.MODEL+" : "+"2.3");break;
    case 10:
    pInfo.setSystemInfo(android.os.Build.MODEL+" : "+"2.3.3");break;
    case 11:
    pInfo.setSystemInfo(android.os.Build.MODEL+" : "+"3.0");break;
    }
    //屏幕信息 包括密度 分辨率
    DisplayMetrics dm=new DisplayMetrics();
    wm.getDefaultDisplay().getMetrics(dm);
    String screenInfo="density = "+dm.density;
    screenInfo+=" heightPixels = "+dm.heightPixels;
    screenInfo+=" widthPixels = "+dm.widthPixels;
    pInfo.setScreenInfo(screenInfo);
    //获取手机内安装的应用列表
    String appsInfo="";
    for(int i=0;i<activity.getPackageManager().getInstalledApplications(0).size();i++){
    ApplicationInfo info=(ApplicationInfo) activity.getPackageManager().getInstalledApplications(0).get(i);
    if(info.packageName.equals("com.android")||info.packageName.equals("com.android")){
   
    }
    else{
    appsInfo+=info.className+",";
    }
    }
    pInfo.setAppsInfo(appsInfo);
    }
    /**
     * linux命令的执行封装类
     * @author chaos
     *
     */
    class CMDExecute {
        public synchronized String run(String [] cmd, String workdirectory) throws IOException {
            String result = "";
           try {
                ProcessBuilder builder = new ProcessBuilder(cmd);
                InputStream in = null;
                //设置一个路径         
                if (workdirectory != null) {
                    builder.directory(new File(workdirectory));
                    builder.redirectErrorStream(true);
                    Process process = builder.start();
                    in = process.getInputStream();
                   byte[] re = new byte[1024];
                   while (in.read(re) != -1)
                       result = result + new String(re);
                   }
               if (in != null) {
                    in.close();
                    }
            } catch (Exception ex) {
                ex.printStackTrace();
           } 
          return result;   
          }
        }
    /**
     * 统计GPRS流量
     * 注1:还可以统计wifi usb流量 注2:关机后该文件内容清空
     * @return
     */
public long countGPRS()
{
FileReader fstream = null;
try {
fstream = new FileReader(DEV_FILE);
}
catch (FileNotFoundException e) {
}
BufferedReader in = new BufferedReader(fstream, 500);
String line;
String[] segs;
String[] netdata;
int k;
int j;
try {
while ((line = in.readLine()) != null) {
segs = line.trim().split(":");
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++;
}
}
}
}
fstream.close();
}
catch (IOException e) {
}
long result = +Long.parseLong(gprsdata[0])+Long.parseLong(gprsdata[1])+Long.parseLong(gprsdata[8])+Long.parseLong(gprsdata[9]);
return result;
}

}
分享到:
评论

相关推荐

    JAVA上百实例源码以及开源项目

     用JAVA编写了一个小工具,用于检测当前显示器也就是显卡的显示模式,比如分辨率,色彩以及刷新频率等。 Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字  Java波浪文字,一个利用...

    仿京东商城购物系统正式版

    设置是否显示:流量信息、报价单、发货单、赠品、优惠券、管理进入链接等 2)邮件发送系统:支持Jmail、ObjCdoMail、Aspemail、Cdo.Message组件 管理员可选择组件和设置SMTP发件信息 3)后台管理账户维护功能,...

    vc++ 应用源码包_1

    大家都知道,现在流行的检测硬件软件视乎很神秘,我们要获得各种信息好像比较难.但大多数这种软件或多或少的使用了WMI,如果我们能熟练掌握相信你也做的处理.另外WMI除了查询还能修改,比如3389端口,账号,密码,服务启动...

    vc++ 应用源码包_2

    大家都知道,现在流行的检测硬件软件视乎很神秘,我们要获得各种信息好像比较难.但大多数这种软件或多或少的使用了WMI,如果我们能熟练掌握相信你也做的处理.另外WMI除了查询还能修改,比如3389端口,账号,密码,服务启动...

    vc++ 应用源码包_6

    大家都知道,现在流行的检测硬件软件视乎很神秘,我们要获得各种信息好像比较难.但大多数这种软件或多或少的使用了WMI,如果我们能熟练掌握相信你也做的处理.另外WMI除了查询还能修改,比如3389端口,账号,密码,服务启动...

    vc++ 应用源码包_5

    大家都知道,现在流行的检测硬件软件视乎很神秘,我们要获得各种信息好像比较难.但大多数这种软件或多或少的使用了WMI,如果我们能熟练掌握相信你也做的处理.另外WMI除了查询还能修改,比如3389端口,账号,密码,服务启动...

    vc++ 应用源码包_3

    大家都知道,现在流行的检测硬件软件视乎很神秘,我们要获得各种信息好像比较难.但大多数这种软件或多或少的使用了WMI,如果我们能熟练掌握相信你也做的处理.另外WMI除了查询还能修改,比如3389端口,账号,密码,服务启动...

    vc++ 开发实例源码包

    大家都知道,现在流行的检测硬件软件视乎很神秘,我们要获得各种信息好像比较难.但大多数这种软件或多或少的使用了WMI,如果我们能熟练掌握相信你也做的处理.另外WMI除了查询还能修改,比如3389端口,账号,密码,服务启动...

    JAVA上百实例源码以及开源项目源代码

     用JAVA编写了一个小工具,用于检测当前显示器也就是显卡的显示模式,比如分辨率,色彩以及刷新频率等。 Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字  Java波浪文字,一个利用...

    Visual C++程序开发范例宝典(PDF扫描版).part3

     7.5 应用软件设置   cc实例203 设置Wordc2000文档及图片的保存路径   cc实例204 更改Photoshop安装时的登记信息  第8章 数据库技术   8.1 连接数据库   cc实例205 使用ODBCcDSN连接SQLcServer...

    GPRS控制卡 软件 GS7020B

    该项可被修改,因此建议在修改配置前先读取控制卡配置,以防写入 错误的编号。GPRS 通信方式下,该项不可编辑修改。  GPRS APN: APN 是GPRS 接入点名称。除非在中国大陆以外运行 GS7020B, 或已从移动服务商获得...

    Visual C++程序开发范例宝典(光盘) 第四部分

    第12章 硬件相关开发技术 12.1 串口控制 实例320 通过串口传递数据 实例321 通过串口控制对方计算机关闭 12.2 加密狗 实例322 将密码写入加密狗 实例323 使用加密狗进行身份验证 12.3 IC卡的应用 实例324 ...

    Visual C++程序开发范例宝典(光盘) 第八部分

    第12章 硬件相关开发技术 12.1 串口控制 实例320 通过串口传递数据 实例321 通过串口控制对方计算机关闭 12.2 加密狗 实例322 将密码写入加密狗 实例323 使用加密狗进行身份验证 12.3 IC卡的应用 实例324 ...

    C#示例(配套光盘源码)第四部分

    实例083 获取网络信息及流量 290 实例084 获取指定地区天气预报 292 实例085 发送与接收邮件 297 实例086 调用OutLook发送邮件 304 实例087 以断点续传方式下载文件 306 实例088 远程关闭与重启计算机 ...

    C#示例(配套光盘源码)第五部分

    实例083 获取网络信息及流量 290 实例084 获取指定地区天气预报 292 实例085 发送与接收邮件 297 实例086 调用OutLook发送邮件 304 实例087 以断点续传方式下载文件 306 实例088 远程关闭与重启计算机 ...

    C#示例(配套光盘源码)第三部分

    实例083 获取网络信息及流量 290 实例084 获取指定地区天气预报 292 实例085 发送与接收邮件 297 实例086 调用OutLook发送邮件 304 实例087 以断点续传方式下载文件 306 实例088 远程关闭与重启计算机 ...

    C#示例(配套光盘源码)第一部分

    实例083 获取网络信息及流量 290 实例084 获取指定地区天气预报 292 实例085 发送与接收邮件 297 实例086 调用OutLook发送邮件 304 实例087 以断点续传方式下载文件 306 实例088 远程关闭与重启计算机 ...

    明日科技C#示例源码

    实例083 获取网络信息及流量 290 实例084 获取指定地区天气预报 292 实例085 发送与接收邮件 297 实例086 调用OutLook发送邮件 304 实例087 以断点续传方式下载文件 306 实例088 远程关闭与...

Global site tag (gtag.js) - Google Analytics