【Android源码 栏目提醒】:网学会员,鉴于大家对Android源码 十分关注,论文会员在此为大家搜集整理了“Android 读取信息实例 - 企业软件开发”一文,供大家参考学习!
Android 读取信息实例 1.手机信息查看助手可行性分析 开始进入编写程序前需要对需求的功能做一些可行性分析以做到有的放矢如果有些无法实现的功能可以尽快调整。
这里分析一下项目需要的功能主要是信息查看和信息收集如版本信息、硬件信息等这些都可以通过读取系统文件或者运行系统命令获取而像获取安装的软件信息和运行时信息则需要通过API提供的接口获取。
实现API接口不是什么问题主要把精力集中在如何实现运行系统命令获取其返回的结果功能实现上。
具体实现代码如下所示: Java代码 1. public class CMDExecute 2. public synchronized String run String cmdString workdirectory 3. throws IOException 4. String result “ ” 5. try 6. processBuilder builder new ProcessBuilder cmd 7. //设置一个路径 8. if workdirectory null 9. builder.directory new File workdirectory 10. builder.redirectErrorStream true 11. Process process builder.start 12. InputStream in process.getInputStream 13. byte re new byte1024 14. while in.read re 15. result result new String re 16. 17. in.close 18. catch Exception ex 19. Ex.printStackTrace 20. 21. Return result 22. 23. 复制代码 1.2手机信息查看助手功能实现 1.2.1手机信息查看助手主界面 按照预设的规划将4类信息的查看入口放在主界面上其布局文件为mail.xml基本上是用一个列表组件组成的实现代码如下所示 Java代码 1. ltxml version”1.0〃 encoding”utf-8〃gt 2. ltLinearLayout xmlns:
android”http://schemas.
android.com/apk/res/
android” 3.
android:/orientation”vertical”
android:layout_width”fill_parent” 4.
android:layout_height”fill_parent”gt 5. ltListView 6.
android:layout_width”fill_parent” 7.
android:layout_height”fill_parent” 8.
android:id”id/itemlist” /gt 9. lt/LinearLayoutgt 复制代码 在这里mail.xml中使用的是LinearLayout布局其中放置了一个ListView组件。
1.2.2查看系统信息实现 当在运行的主界面单击第一行时也就是“系统信息”这一行将执行代码如下: Java代码 1. case 0 2. intent.setClasseoeInfosAssistant.this System.class 3. startActivityintent 4. break 复制代码 代码运行后将显示系统System这个界面这就是查看系统信息的主界面其和主界面差不多也就是列表显示几个需要查看的系统信息 1.2.2.1操作系统版本 单击界面第一行“操作系统版本”项则会打开一个新的界面其对应的是ShowInfo.java文件然后需要显示该设备的操作系统版本信息而这个信息在/proc/version中有可以直接调用。
在可行性分析中给出的CMDExencute类来调用系统的cat命令获取该文件的内容实现代码如下: Java代码 1. Public static String fetch_version_info 2. String result null 3. CMDExecute cmdexe new CMDExecute 4. Try 5. String args ”/system/bin/cat” “/proc/version” 6. result cmdexe.runargs “system/bin/” 7. catch IOException ex 8. ex.printStackTrace 9. 10. Return result 11. 复制代码 上述代码使用的是CMDExecute类调用系统的“”/system/bin/cat””工具获取“”/proc/version””中内容。
其运行效果。
从显示的查寻结果可以看到这个设备的系统版本是Linux version 2.6.25-018430-gfea26b0。
1.2.2.2系统信息 在
Android中想要获取系统信息可以调用其提供的方法System.getPropertypropertyStr而系统信息诸如用户根目录user.home等都可以通过这个方法获取实现代码如下: Java代码 1. private static String initPropertyString descriptionString propertyStr 2. if buffer null 3. buffer new StringBuffer 4. 5. buffer.appenddescription.append”:” 6. buffer.append System.getPropertypropertyStr.append”n” 7. return buffer.toString 8. 9. private static String getSystemProperty 10. buffer new StringBuffer 11. initProperty”java.vendor.url””java.vendor.url” 12. initProperty”java.class.path””java.class.path” 13. . . . 14. return buffer.toString 15. 复制代码 上述代码主要是通过调用系统提供的System.getProperty方法获取指定的系统信息并合并成字符串返回。
1.2.2.3运营商信息 运营商信息中包含IMEI、[网学网用户上传]等在
Android中提供了运营商管理类TelephonyManager可以通过TelephonyManager来获取运营商相关的信息实现的关键代码如下 Java代码 1. public static String fetch_tel_statusContext cx 2. String result null 3. TelephonyManager tm TelephonyManager cx 4. .getSystemServiceContext.TELEPHONY_SERVICE// 5. string str ” “ 6. str “DeviceIdIMEI ” tm.getDetDeviceId “n” 7. str “DeviceSoftwareVersion ” tm.getDeviceSoftwareVersion”n” 8. . . . 9. int mcc cx.getResources.getConfiguration.mcc 10. int mcc cx.getResources.getConfiguration.mcc 11. str ”IMSI MCC Mobile Country Code: ” String.valueOfmcc “n” 12. str ”IMSI MCC Mobile Country Code: ” String.valueOfmnc “n” 13. result str 14. return result 15. 复制代码 在上述的代码中首先调用系统的getSystemService Context.TELEPHONY_SERVICE方法获取一个TelephonyManager对象tm进而调用其方法getDeviceId获取DeviceId信息调用getDeviceSoftware Version获取设备的软件版本信息等。
1.2.3查看硬件信息 1.2.3.1获取CPU信息 可以在手机设备的/proc/cpuinfo中获取CPU信息调用CMDEexecute执行系统的cat的命令读取/proc/cpuinfo的内容显示的就是其CPU信息实现代码如下: Java代码 1. public static String fetch_cpu_info 2. String result null 3. CMDExecute cmdexe new CMDExecute 4. try 5. String args “/system/bin/cat” “/proc/cpuinfo” 6. result cmdexe.runargs “/system/bin/” 7. Log.i”result””result” result 8. catch IOException ex 9. ex.printStackTrace 10. 11. return result 12. 复制代码 上述代码使用CMDExecute调用系统中的”/system/bin/cat”命令查看”/proc/cpuinfo”中的内容即可得到CPU信息。
1.2.3.2获取内存信息 获取内存信息的方法和获取CPU信息的实现差不多可以读取/proc/meminfo信息另外还可以通过getSystemServiceContext.ACTIVIT_SERV-ICE获取ActivityManager.MemoryInfo对象进而获取可用内存信息主要代码如下 Java代码 1. / 2. 系统内存情况查看 3. / 4. public static String getMemoryInfoContext context 5. StringBuffer memoryInfo new StringBuffer 6. final ActivityManager activityManager AcctivityManager context 7. .getSystemServiceContext.ACTIVITY_SERVICE 8. ActivityManager. MemoryInfo outInfo new ActivityManager. MemoryInfo 9. activityManager.getMemoryInfooutInfo 10. memoryInfo.append”nTotal Available Memory :”.append 11. outInfo.availMem gtgt 10.append”k” 12. memoryInfo.append”nTotal Available Memory :”.append 13. outInfo.availMem gtgt 20.append”k” 14. memoryInfo.append”nIn low memory situation:”.append 15. outInfo. Lowmemory 16. String result null 17. CMDExecute cmdexe new CMDExecute 18. try 19. String args “/system/bin/cat” “/proc/meminfo” 20. result cmdexe.runargs “/system/bin/” 21. catch IOException ex 22. Log.i”fetch_process_info””ex” ex.toString 23. 24. Return memoryInfo.toString”nn”result 25. 复制代码 上述代码中首先通过ActivityManager对象获取其可用的内存然后通过查看“/proc/meminfo”内容获取更详细的信息。
1.2.3.3获取磁盘信息 手机设备的磁盘信息可以通过df命令获取所以这里获取磁盘信息的方法和前面类似惟一不同的是这个是直接执行命令获取其命令的返回就可以了关键代码如下: Java代码 1. //磁盘信息 2. public static String fetch_disk_info 3. String result null 4. CMDExecute cmdexe new CMDExecute 5. try 6. String args “/system/bin/df” 7. result cmdexe.runargs “/system/bin/” 8. Log.i”result””result” result 9. catch IOException ex 10. ex.printStackTrace 11. 12. return result 13. 复制代码 1.2.3.4获取网络信息 要获取手机设备的网络信息只要读取/system/bin/netcfg中的信息就可以了关键代码如下 Java代码 1. public static String fetch_netcfg_info 2. String result null 3. String result null 4. CMDExecute cmdexe new CMDExecute 5. try 6. String args “/system/bin/netcfg” 7. result cmdexe.runargs “/system/bin/” 8. catch IOException ex 9. Log.i”fetch_process_info””ex” ex.toString 10. 11. return result 12. 复制代码 1.2.3.5获取显示频信息 除了显示手机的CPU、内存、磁盘信息外还有个非常重要的硬件显示频。
在
Android中它提供了DisplayMetrics类可以通过getApplication Context、getResources、getDisplayMetrics初始化进而读取其屏幕宽widthPixels、高heightPixels等信息实现的关键代码如下 Java代码 1. public static String getDisplayMetricsContext cx 2. String str ” “ 3. DisplayMetrics dm new DisplayMetrics 4. dm cx.getApplicationContext.getResources.getDisplayMetrics 5. int screenWidth dm.widthPixels 6. int screenHeight dm.heightPixels 7. float density dm.density 8. float xdpi dm.xdpi 9. float ydpi dm.ydpi 10. str “The absolute width: ” String.valueOfscreenWidth “pixelsn” 11. str “The absolute heightin: ” String.valueOfscreenHeight “pixelsn” 12. str “The logical density of the display. : ” String.valueOfdensity “n” 13. str “X dimension : ” String.valueOfxdpi ”pixels per inchn” 14. str “Y dimension : ” String.valueOfydpi ”pixels per inchn” 15. renturn str 16. 复制代码 1.2.4查看软件信息 在
Android上可以在手机上随便安装自己喜欢的应用软件查看软件信息的功能就是收集并显示已经安装的应用软件信息。
在
Android中它提供了getPackageManager、getInstalledApplications0方法可以直接返回全部已经安装的应用列表。
这个功能就是只需要获取列表再进行显示在列表中就可以了。
但是如果安装的软件比较多那么获取信息所花费的时间会比较多为了更好地完善用户使用的体验在获取列表时需要在界面提示用户耐心等待这就需要用到
Android提供的另外一个功能Runnable。
引入Runnable比较简单只需要在定义类的时候实现Runnable接口就可以了所以这里的软件信息查看界面对应的Software.java类声明代码如下 Java代码 1. public class Software extends Activity implements Runnable 2. . . . 3. 复制代码 然后需要在这个Activity启动的时候引入进度条ProgressDialog来显示一个提示界面onCreate代码如下所示 Java代码 1. Public void onCreateBundle icicle 2. Super.onCreateicicle 3. setContentViewR.layout.softwares 4. setTitle”软件信息” 5. itemlist ListView findViewByIdR.id.itemlist 6. pd ProgressDialog.showthis “请稍候. .” “正在收集你已经安装的软件信息. . .” trueflase 7. Thread thread new Threadthis 8. Thread.start 9. 复制代码 该方法创建了一个ProgressDialog并设定其提示信息。
然后实现其线程的run方法该方法实现其真正执行的逻辑实现代码如下 Java代码 1. Override 2. Public void run 3. fetch_installed_apps 4. handler.sendEmptyMessage0 5. 复制代码 上述代码调用自定义的fetch_installed_app方法获取已经安装的应用信息这个方法是比较消耗时间的实现代码如下 Java代码 1. public List fetch_installed_apps 2. ListltApplicationInfogt packages getPackageManager.getInstalledApplications0 3. list new ArrayListltMaltString Objectgtgt 4. packages.size 5. IteratorltApplicationInfogt l packages.iterator 6. while l.hasNext 7. MapltString Objectgt map new HashMapltString Objectgt 8. ApplicationInfo app ApplicationInfo l.next 9. String packageName app.packageName 10. String label ” “ 11. try 12. label getPackageManager.getApplicationLabelapp.toString 13. catch Exception e 14. Log.i”Exception” e.toString 15. 16. map new HashMapltString Objectgt 17. map.put”name” label 18. map.put”desc” packageName 19. list.addmap 20. 21. Return list 22. 复制代码 上述代码使用getPackageManager.getInstalledApplications0获取已经安装的软件信息进而构造用来显示的列表List对象同时界面通过进度条ProgressDialog显示提示信息。
当这个方法运行完成后会调用handler.sendEmptyMessage0语句给handler发送一个通知消息使其执行下面的动作下面就是这个handler的实现方法 Java代码 1. private Handler handler new Handler 2. public void handleMessage msg 3. refreshListItems 4. pd.dismiss 5. 6. 复制代码 上述代码中当其接收到run线程传递的消失后先调用refreshListItems方法显示列表最后调用进度条ProgressDialog的dismiss方法使其等待提示消失。
而refreshListItems的实现代码如下 Java代码 1. private void refreshListItems 2. list fetch_installed_apps 3. SimpleAdapter notes new SimpleAdaterthis list R.layout.info_row 4. New String “name” “desc” new int R.id.name 5. R.id.desc 6. Itemlist.setAdapternotes 7. setTitle”软件信息已经安装”list.size”款应用.” 8. 复制代码 这些代码显示已经安装的应用列表的同时在Title上显示一共安装了多少款应用 1.2.5获取运行时信息 运行时的一些信息包括后台运行的Service、Task以及进程信息其运行界面如图20。
1.2.5.1获取正在运行的Service信息 可以通过调用context.getSystemServiceContext.ACTIVITY_SERVICE获取ActivityManager进而通过系统提供的方法getRunningServicesint maxNum获取正在运行的服务列表RunningServiceInfo再对其结果进一步分析得到服务对应的进程名及其他信息实现的关键代码如下 Java代码 1. //正在运行的服务列表 2. public static String getRunningServicesInfoContext context 3. StringBuffer serviceInfo new StringBuffer 4. final ActivityManager activityManager ActivityManager context 5. .getSystemServiceContext. ACTIVITY_SERVICE 6. ListltRunningServiceInfogt services activityManager.getRunningServices100 7. IteratorltRunningserviceInfogt l services.iterator 8. while l.hasNext 9. RunningServiceInfo si RunningServiceInfo l.next 10. serviceInfo.append”pid: “.appendsi.pid 11. serviceInfo.append”nprocess: “.appendsi. process 12. serviceInfo.append”nservice: “.appendsi. service 13. serviceInfo.append”ncrashCount: “.appendsi. crashCount 14. serviceInfo.append”nclicentCount: “.appendsi. clicentCount 15. serviceInfo.append”nactiveSince:”.appendToolHelper.formatDatasi.activeSince 16. serviceInfo.append”nlastActivityTime: “.appendToolHelper.formatDatasi.lastAct- 17. ivityTime 18. serviceInfo.append”nn “ 19. 20. return serviceInfo.toString 21. 复制代码 上述代码调用activityManager.getRunningServices100获取正在运行的服务并依次遍历得到每个服务对应的pid进程等信息。
1.2.5.2获取正在运行的Task信息 获取正在运行的Task信息调用的是activityManager.getRunningTasksint maxNum来获取对应的正在运行的任务信息列表RunningTaskInfo进而分析、显示任务信息其关键代码如下 Java代码 1. public static String getRunningTaskInfoContext context 2. StringBuffer sInfo new StringBuffer 3. final ActivityManager activityManager ActivityManager context 4. .getSystemServiceContext. ACTIVITY_SERVICE 5. ListltRunningTaskInfogt tasks activityManager.getRunningTasks100 6. IteratorltRunningTaskInfogt l tasks.iterator 7. while l.hasNext 8. RunningTaskInfo ti RunningTaskInfo l.next 9. sInfo.append”id: “.appendti.id 10. sInfo.append”nbaseActivity: “.appendti. baseActivity.flattenToString 11. sInfo.append”nnumActivities: “.appendti. nnumActivities 12. sInfo.append”nnumRunning: “.appendti. numRunning 13. sInfo.append”ndescription: “.appendti. description 14. sInfo.append”nn 15. 16. Return sInfo.toString 17. 复制代码 上述代码调用系统提供的activityManager.getRunningTasks100方法获取任务列表依次获取对应的id等信息。
从显示可以看出获取手机上正在运行的Task的列表和其对应的进程信息这对用户了解设备运行情况非常有用。
1.2.5.3获取正在运行的进程信息 该段程序是通过CMD Executo的方式来运行系统命令。
关键代码如下 Java代码 1. public static String fetch_process_info 2. Log.i”fetch_process_info””start. . . . “ 3. String result null 4. CMDExecutr cmdexe new CMDExecute 5. try 6. String args “/system/bin/top” “-n” “l” 7. result cmdexe.runargs “/system/bin/” 8. catch IOException ex 9. Log.i”fetch_process_info””ex” ex.toString 10. 11. return result 复制代码 通过这个功能可以非常详细地了解到正在运行的进程和各个进程所消耗的资源情况。
1.2.6文件浏览器 文件浏览器的这个功能用户可以遍历浏览整个文件系统以便更好地了解手机设备状况。
在主界面单击最后一行将执行下列代码 Java代码 1. case 4: .
上一篇:
Android磁盘管理
下一篇:
法律专业开题报告范文