Android 的cpu 硬盘 内存 网络设置 系统信息 硬件信息.docx

上传人:b****8 文档编号:9548073 上传时间:2023-02-05 格式:DOCX 页数:18 大小:25.22KB
下载 相关 举报
Android 的cpu 硬盘 内存 网络设置 系统信息 硬件信息.docx_第1页
第1页 / 共18页
Android 的cpu 硬盘 内存 网络设置 系统信息 硬件信息.docx_第2页
第2页 / 共18页
Android 的cpu 硬盘 内存 网络设置 系统信息 硬件信息.docx_第3页
第3页 / 共18页
Android 的cpu 硬盘 内存 网络设置 系统信息 硬件信息.docx_第4页
第4页 / 共18页
Android 的cpu 硬盘 内存 网络设置 系统信息 硬件信息.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

Android 的cpu 硬盘 内存 网络设置 系统信息 硬件信息.docx

《Android 的cpu 硬盘 内存 网络设置 系统信息 硬件信息.docx》由会员分享,可在线阅读,更多相关《Android 的cpu 硬盘 内存 网络设置 系统信息 硬件信息.docx(18页珍藏版)》请在冰豆网上搜索。

Android 的cpu 硬盘 内存 网络设置 系统信息 硬件信息.docx

Android的cpu硬盘内存网络设置系统信息硬件信息

1.手机信息查看助手可行性分析

  开始进入编写程序前,需要对需求的功能做一些可行性分析,以做到有的放矢,如果有些无法实现的功能,可以尽快调整。

  这里分析一下项目需要的功能,主要是信息查看和信息收集,如版本信息、硬件信息等,这些都可以通过读取系统文件或者运行系统命令获取,而像获取安装的软件信息和运行时信息则需要通过API提供的接口获取。

实现API接口不是什么问题,主要把精力集中在如何实现运行系统命令,获取其返回的结果功能实现上。

具体实现代码如下所示:

 

publicclassCMDExecute{

publicsynchronizedStringrun(String[]cmd,Stringworkdirectory)throwsIOException{

Stringresult="";

try{

ProcessBuilderbuilder=newProcessBuilder(cmd);

InputStreamin=null;

//设置一个路径

if(workdirectory!

=null){

builder.directory(newFile(workdirectory));

builder.redirectErrorStream(true);

Processprocess=builder.start();

in=process.getInputStream();

byte[]re=newbyte[1024];

while(in.read(re)!

=-1)

result=result+newString(re);

}

if(in!

=null){

in.close();

}

}catch(Exceptionex){

ex.printStackTrace();

}

returnresult;

}

}

1.2手机信息查看助手功能实现

1.2.1手机信息查看助手主界面

  按照预设的规划,将4类信息的查看入口放在主界面上,其布局文件为main.xml,基本上是用一个列表组件组成的,实现代码如下所示:

在这里main.xml中使用的是LinearLayout布局,其中放置了一个ListView组件。

 

xmlversion="1.0"encoding="utf-8"?

>

android="

android:

/orientation="vertical"android:

layout_width="fill_parent"

android:

layout_height="fill_parent">

android:

layout_width="fill_parent"

android:

layout_height="fill_parent"

android:

id="@+id/itemlist"/>

1.2.2查看系统信息实现

  当在运行的主界面单击第一行时,也就是“系统信息”这一行,将执行代码如下:

 

1case0:

2  intent.setClass(eoeInfosAssistant.this,System.class);

3  startActivity(intent);

4  break;

代码运行后将显示系统(System)这个界面,这就是查看系统信息的主界面,其和主界面差不多,也就是列表显示几个需要查看的系统信息

1.2.2.1操作系统版本

单击图9所示(无图)的界面第一行“操作系统版本”项,则会打开一个新的界面,其对应的是ShowInfo.java文件,然后需要显示该设备的操作系统版本信息,而这个信息在/proc/version中有,可以直接调用。

在可行性分析中给出的CMDExencute类来调用系统的cat命令获取该文件的内容,实现代码如下:

 

1publicstaticStringfetch_version_info(){

2Stringresult=null;

3CMDExecutecmdexe=newCMDExecute();

4try{

5String[]args={"/system/bin/cat","/proc/version"};

6result=cmdexe.run(args,"system/bin/");

7}catch(IOExceptionex){

8ex.printStackTrace();

9}

10returnresult;

11}

  上述代码使用的是CMDExecute类,调用系统的“"/system/bin/cat"”工具,获取“"/proc/version"”中内容。

其运行效果如图9。

从图中显示的查寻结果可以看到,这个设备的系统版本是Linuxversion2.6.25-018430-gfea26b0。

1.2.2.2系统信息

  在Android中,想要获取系统信息,可以调用其提供的方法System.getProperty(propertyStr),而系统信息诸如用户根目录(user.home)等都可以通过这个方法获取,实现代码如下:

 

1publicstaticStringBufferbuffer=null;

2

3 privatestaticStringinitProperty(Stringdescription,StringpropertyStr){

4if(buffer==null){

5buffer=newStringBuffer();

6}

7buffer.append(description).append(":

");

8buffer.append(System.getProperty(propertyStr)).append("\n");

9returnbuffer.toString();

10}

11

12 privatestaticStringgetSystemProperty(){

13buffer=newStringBuffer();

14initProperty("java.vendor.url","java.vendor.url");

15initProperty("java.class.path","java.class.path");

16...

17returnbuffer.toString();

18}

上述代码主要是通过调用系统提供的System.getProperty方法获取指定的系统信息,并合并成字符串返回。

1.2.2.3运营商信息

  运营商信息中包含IMEI、手机号码等,在Android中提供了运营商管理类(TelephonyManager),可以通过TelephonyManager来获取运营商相关的信息,实现的关键代码如下:

 

1publicstaticStringfetch_tel_status(Contextcx){

2Stringresult=null;

3TelephonyManagertm=(TelephonyManager)cx.getSystemService(Context.TELEPHONY_SERVICE);

4Stringstr="";

5str+="DeviceId(IMEI)="+tm.getDeviceId()+"\n";

6str+="DeviceSoftwareVersion="+tm.getDeviceSoftwareVersion()+"\n";

7//TODO:

Dosomething...

8 intmcc=cx.getResources().getConfiguration().mcc;

9intmnc=cx.getResources().getConfiguration().mnc;

10str+="IMSIMCC(MobileCountryCode):

"+String.valueOf(mcc)+"\n";

11str+="IMSIMNC(MobileNetworkCode):

"+String.valueOf(mnc)+"\n";

12result=str;

13returnresult;

14}

  在上述的代码中,首先调用系统的getSystemService(Context.TELEPHONY_SERVICE)方法获取一个TelephonyManager对象tm,进而调用其方法getDeviceId()获取DeviceId信息,调用getDeviceSoftwareVersion()获取设备的软件版本信息等。

1.2.3查看硬件信息

1.2.3.1获取CPU信息

  可以在手机设备的/proc/cpuinfo中获取CPU信息,调用CMDEexecute执行系统的cat的命令,读取/proc/cpuinfo的内容,显示的就是其CPU信息,实现代码如下:

1publicstaticStringfetch_cpu_info(){

2Stringresult=null;

3CMDExecutecmdexe=newCMDExecute();

4try{

5String[]args={"/system/bin/cat","/proc/cpuinfo"};

6result=cmdexe.run(args,"/system/bin/");

7Log.i("result","result="+result);

8}catch(IOExceptionex){

9ex.printStackTrace();

10}

11returnresult;

12}

上述代码使用CMDExecute,调用系统中的"/system/bin/cat"命令查看"/proc/cpuinfo"中的内容,即可得到CPU信息。

1.2.3.2获取内存信息

  获取内存信息的方法和获取CPU信息的实现差不多,可以读取/proc/meminfo信息,另外还可以通过getSystemService(Context.ACTIVIT_SERV-

ICE)获取ActivityManager.MemoryInfo对象,进而获取可用内存信息,主要代码如下:

ViewCode

1/**

2*系统内存情况查看

3*/

4 publicstaticStringgetMemoryInfo(Contextcontext){

5StringBuffermemoryInfo=newStringBuffer();

6

7finalActivityManageractivityManager=

8(ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);

9ActivityManager.MemoryInfooutInfo=newActivityManager.MemoryInfo();

10activityManager.getMemoryInfo(outInfo);

11

12memoryInfo.append("\nTotalAvailableMemory:

").append(outInfo.availMem>>10).append("k");

13memoryInfo.append("\nTotalAvailableMemory:

").append(outInfo.availMem>>20).append("k");

14memoryInfo.append("\nInlowmemorysituation:

").append(outInfo.lowMemory);

15

16Stringresult=null;

17CMDExecutecmdexe=newCMDExecute();

18try{

19String[]args={"/system/bin/cat","/proc/meminfo"};

20result=cmdexe.run(args,"/system/bin/");

21}catch(IOExceptionex){

22Log.i("fetch_process_info","ex="+ex.toString());

23}

24return(memoryInfo.toString()+"\n\n"+result);

25}

上述代码中首先通过ActivityManager对象获取其可用的内存,然后通过查看“/proc/meminfo”内容获取更详细的信息。

1.2.3.3获取磁盘信息

  手机设备的磁盘信息可以通过df命令获取,所以,这里获取磁盘信息的方法和前面类似,惟一不同的是,这个是直接执行命令,获取其命令的返回就可以了,关键代码如下:

 

//磁盘信息

publicstaticStringfetch_disk_info(){

Stringresult=null;

CMDExecutecmdexe=newCMDExecute();

try{

String[]args={"/system/bin/df"};

result=cmdexe.run(args,"/system/bin/");

Log.i("result","result="+result);

}catch(IOExceptionex){

ex.printStackTrace();

}

returnresult;

}

1.2.3.4获取网络信息

要获取手机设备的网络信息,只要读取/system/bin/netcfg中的信息就可以了,关键代码如下:

 

publicstaticStringfetch_netcfg_info(){

Stringresult=null;

CMDExecutecmdexe=newCMDExecute();

try{

String[]args={"/system/bin/netcfg"};

result=cmdexe.run(args,"/system/bin/");

}catch(IOExceptionex){

Log.i("fetch_process_info","ex="+ex.toString());

}

returnresult;

}

1.2.3.5获取显示频信息

  除了显示手机的CPU、内存、磁盘信息外,还有个非常重要的硬件,显示频。

在Android中,它提供了DisplayMetrics类,可以通过getApplicationContext()、getResources()、getDisplayMetrics()初始化,进而读取其屏幕宽(widthPixels)、高(heightPixels)等信息,实现的关键代码如下:

 

ViewCode

1publicstaticStringgetDisplayMetrics(Contextcx){

2Stringstr="";

3DisplayMetricsdm=newDisplayMetrics();

4dm=cx.getApplicationContext().getResources().getDisplayMetrics();

5intscreenWidth=dm.widthPixels;

6intscreenHeight=dm.heightPixels;

7floatdensity=dm.density;

8floatxdpi=dm.xdpi;

9floatydpi=dm.ydpi;

10str+="Theabsolutewidth:

"+String.valueOf(screenWidth)+"pixels\n";

11str+="Theabsoluteheightin:

"+String.valueOf(screenHeight)+"pixels\n";

12str+="Thelogicaldensityofthedisplay.:

"+String.valueOf(density)+"\n";

13str+="Xdimension:

"+String.valueOf(xdpi)+"pixelsperinch\n";

14str+="Ydimension:

"+String.valueOf(ydpi)+"pixelsperinch\n";

15returnstr;

16}

1.2.4查看软件信息

在Android上,可以在手机上随便安装自己喜欢的应用软件,查看软件信息的功能就是收集并显示已经安装的应用软件信息。

Android提供了getPackageManager()、getInstalledApplications(0)方法,可以直接返回全部已经安装的应用列表。

这个功能就是只需要获取列表,再进行显示在列表中就可以了。

但是,如果安装的软件比较多,那么获取信息所花费的时间会比较多,为了更好地完善用户使用的体验,在获取列表时,需要在界面提示用户耐心等待,这就需要用到Android提供的另外一个功能Runnable。

引入Runnable比较简单,只需要在定义类的时候实现Runnable接口就可以了,所以,这里的软件信息查看界面对应的Software.java类声明代码如下:

publicclassSoftwareextendsActivityimplementsRunnable{

...

}

然后需要在这个Activity启动的时候,引入进度条ProgressDialog来显示一个提示界面,onCreate代码如下所示:

1publicvoidonCreate(Bundleicicle){

2Super.onCreate(icicle);

3setContentView(R.layout.softwares);

4setTitle("软件信息");

5itemlist=(ListView)findViewById(R.id.itemlist);

6pd=ProgressDialog.show(this,"请稍候..","正在收集你已经安装的软件信息...",true,false);

7Threadthread=newThread(this);

8thread.start();

9}

  该方法创建了一个ProgressDialog,并设定其提示信息。

然后实现其线程的run()方法,该方法实现其真正执行的逻辑,实现代码如下:

@Override

Publicvoidrun(){

   fetch_installed_apps();

   handler.sendEmptyMessage(0);

}

上述代码调用自定义的fetch_installed_app()方法获取已经安装的应用信息,这个方法是比较消耗时间的,实现代码如下:

ViewCode

1publicArrayListfetch_installed_apps(){

2Listpackages=getPackageManager().getInstalledApplications(0);

3ArrayList>list=newArrayList>(packages.size());

4

5Iteratorl=packages.iterator();

6while(l.hasNext()){

7HashMapmap=newHashMap();

8ApplicationInfoapp=(ApplicationInfo)l.next();

9StringpackageName=app.packageName;

10Stringlabel="";

11try{

12label=getPackageManager().getApplicationLabel(app).toString();

13}catch(Exceptione){

14Log.i("Exception",e.toString()

15);

16}

17map=newHashMap();

18map.put("name",label);

19map.put("desc",packageName);

20list.add(map);

21}

22returnlist;

23}

  上述代码使用getPackageManager().getInstalledApplications(0)获取已经安装的软件信息,进而构造用来显示的列表(List)对象,同时,界面通过进度条(ProgressDialog)显示提示信息,运行效果如图18所示。

当这个方法运行完成后,会调用handler.sendEmptyMessage(0)语句给handler发送一个通知消息,使其执行下面的动作,下面就是这个handler的实现方法:

privateHandlerhandler=newHandler(){

  publicvoidhandleMessagemsg){

  refreshListItems();

  pd.d

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 公务员考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1