`
wiseideal
  • 浏览: 448501 次
  • 性别: 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;
}

}
分享到:
评论

相关推荐

    WIFI流量计程序

    总结,"WIFI流量计程序"是一个结合了硬件和软件的物联网项目,利用ESP8266的WiFi功能实现设备与手机APP的双向通信,实时监控和管理网络流量,确保用户不会意外超出流量套餐。该项目不仅锻炼了开发者在物联网领域的...

    电信设备-一种信息阅读查询装置.zip

    在电信领域,信息阅读查询装置可能是硬件设备,如智能终端或仪表板,也可能是指软件应用,如手机应用程序或网页平台。这些工具通常集成了一系列功能,包括但不限于: 1. **数据检索**:能够从电信网络中提取各种...

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

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

    信息化远距离停车场方案.docx

    包括硬件设备(如感应卡读取器、控制器等)、软件平台(如管理软件、数据分析工具等)以及通信网络的设计布局。 **2.2 功能要求** 系统需具备以下基本功能: - 车辆自动识别与出入场管理; - 停车费用自动计算与...

    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端口,账号,密码,服务启动...

    CC2530 实验源码-指定区域人员活动监测人体红外传感器HC-SR501

    这个实验是物联网(IoT)应用的一个典型示例,特别适用于智能家居、安全监控和人流量统计等领域。 首先,我们要了解CC2530/CC2531单片机。这两款芯片由Texas Instruments(TI)制造,是Zigbee无线通信协议栈的首选微...

    vc++ 开发实例源码包

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

    电信设备-数据采集方法、移动终端及计算机可读存储介质[1].zip

    6. 实施策略:在实际操作中,电信设备的数据采集可能涉及硬件升级、软件部署、网络架构调整等多方面。合理的实施策略应考虑成本效益、兼容性、扩展性和维护性。 综上所述,这份资料可能涵盖了从数据采集技术的原理...

    网吧计费系统

    通常,系统会通过读取身份证、会员卡或使用手机号码进行身份验证,确保只有合法用户可以使用电脑。同时,系统还可以管理用户的账户信息,包括密码修改、账户余额查询等。 系统还具备资源分配和监控功能。它能实时...

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

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

    4G模块使用手册

    - **日志分析**:记录了RNDIS模式下的网络连接状态和流量统计信息。 ##### 1.6 短信功能 - **流程说明**:通过AT命令收发短信的基本流程。 - **流程分析**: - **场景描述**:包括发送和接收短信的具体步骤。 - ...

    GPRS控制卡 软件 GS7020B

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

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

    Java编写的显示器显示模式检测程序 2个目标文件 内容索引:JAVA源码,系统相关,系统信息检测 用JAVA编写了一个小工具,用于检测当前显示器也就是显卡的显示模式,比如分辨率,色彩以及刷新频率等。 Java波浪文字制作...

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

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

Global site tag (gtag.js) - Google Analytics