android获取手机信息

android系统的很多信息可以通过 /proc 目录下获得,如

cat  /proc/cpuinfo                       获取cpu信息

cat /proc/meminfo                      获取内存信息

这些信息以文本格式保存,可以通过IO流读取,比较简单,在这里考虑到一些内容并不是以文本方式保存,磁盘信息

我们通过代码实现一个linux指令解析器来得到要获取的信息

指令解析器如下:

public class CMDExecutor {
	/**
	 * 执行命令
	 * @param cmd       命令参数
	 * @param workdir   当前目录(即执行指令 pwd 看到所在目录)
	 * @return
	 */
	public synchronized String run(String[] cmd, String workdir){
		String result = "";
		InputStream is = null;
		try {
			ProcessBuilder builder = new ProcessBuilder(cmd);
			if(!TextUtils.isEmpty(workdir)){
				builder.directory(new File(workdir));   // 设置执行指令执所在目录
				builder.redirectErrorStream();
				Process process = builder.start();      // 执行指令
				is = process.getInputStream();
				byte[] buf = new byte[1024];
				int len = 0;
				while((len = is.read(buf)) != -1){
					result += new String(buf, 0, len);
				}
			}
		} catch (Exception e) {
			return null;
		}finally{
			if(is != null){
				try {
					is.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return result;
	}
}

获致手机信息工具类:

public class GetPhoneInfoUtil {
	// 获取内核版本,gcc版本等
	public String fetch_version_info(){
		String result = null;
		CMDExecutor cmdexe = new CMDExecutor();
		String[] args = {"/system/bin/cat", "/proc/version"}; // "/system/bin/cat" 指令绝对路径
		result = cmdexe.run(args, "system/bin/");   // 已指定指令执行目录,上面绝对路径可写相对路径 "cat"
		return result;
	}

	// 获取CPU信息
	public String fetch_cpu_info() {
		String result = null;
		CMDExecutor cmdexe = new CMDExecutor();
		String[] args = { "/system/bin/cat", "/proc/cpuinfo" };
		result = cmdexe.run(args, "/system/bin/");
		return result;
	}

	// 要加输权限:android.permission.READ_PHONE_STATE
	// 运营商信息
	public String fetch_tel_status(Context context) {
		String result = null;
		TelephonyManager tm = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
		String str = " ";
		str += "DeviceId(IMEI) = " + tm.getDeviceId() + "\n";
		str += "DeviceSoftwareVersion = " + tm.getDeviceSoftwareVersion() + "\n";
		int mcc = context.getResources().getConfiguration().mcc;
		int mnc = context.getResources().getConfiguration().mnc;
		str += "IMSI MCC (Mobile Country Code): " + String.valueOf(mcc) + "\n";
		str += "IMSI MNC (Mobile Network Code): " + String.valueOf(mnc) + "\n";
		result = str;
		return result;
	}

	private static StringBuffer buffer = null;
	public static String initProperty(String description, String propertyStr) {
		if (buffer == null) {
			buffer = new StringBuffer();
		}
		buffer.append(description).append(":\t");
		buffer.append(System.getProperty(propertyStr)).append("\n");
		return buffer.toString();
	}
	public static String getSystemProperty() {
		buffer = new StringBuffer();
		initProperty("java.vendor.url", "java.vendor.url");
		initProperty("java.class.path", "java.class.path");
		initProperty("os.name", "os.name");
		initProperty("os.version", "os.version");
		initProperty("user.home", "user.home");
		return buffer.toString();
	}

	// 获取网络信息
	public static String fetch_netcfg_info(){
		String result = null;
		CMDExecutor cmdexe = new CMDExecutor();
		String[] args = { "/system/bin/netcfg" };
		result = cmdexe.run(args, "/system/bin/");
		return result;
	}

	// 磁盘信息
	public static String fetch_disk_info() {
		String result = null;
		CMDExecutor cmdexe = new CMDExecutor();
		String[] args = { "/system/bin/df" };
		result = cmdexe.run(args, "/system/bin/");

		return result;
	}

	// 获取显示频信息
	public static String getDisplayMetrics(Context context) {
		String str = "";
		DisplayMetrics dm = new DisplayMetrics();
		dm = context.getResources().getDisplayMetrics();
		// 上面一行等同于下面两行
		//WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
		//wm.getDefaultDisplay().getMetrics(dm);
		int screenWidth = dm.widthPixels;
		int screenHeight = dm.heightPixels;
		float density = dm.density;
		float xdpi = dm.xdpi;
		float ydpi = dm.ydpi;
		str += "The absolute width: " + String.valueOf(screenWidth) + "pixels \n";
		str += "The absolute heightin: " + String.valueOf(screenHeight)
				+ "pixels  \n";
		str += "The logical density of the display :"
				+ String.valueOf(density) + " \n";
		str += "X dimension : " + String.valueOf(xdpi) + "pixels per inch \n";
		str += "Y dimension : " + String.valueOf(ydpi) + "pixels per inch \n";
		return str;
	}
}

关于System.getProperty(),可参考

System.getProperty()方法可以获取的值

时间: 2024-10-18 05:09:40

android获取手机信息的相关文章

【小功能2】android获取手机信息(号码,内存,CPU,分辨率,MAC,IP,SD卡,IMEI,经纬度,信号强度等等)

为了实现一个功能,需要搜集手机信息,自己先在网上找了相关信息进行了汇总,主要是汇集手机的信息,一般想要的信息在手机设置->关于手机->状态消息里面包含了手机的各种信息,下面的代码中也主要显示了那些信息,但是源码的方法我还没有看,先把总结的贴出来.先上图(太多就截取几个).  上代码啦,太多了,就写主要代码了. // 获取Android手机中SD卡存储信息 获取剩余空间 public void getSDCardInfo() { // 在manifest.xml文件中要添加 /* * <u

android 获取手机信息

获取手机信息: 在文件 AndroidManifest.xml 中添加权限 <uses-permission android:name= "android.permission.READ_PHONE_STATE"/>等 String mBrand = android.os.Build.BRAND;// 手机品牌 String mType = android.os.Build.MODEL; // 手机型号   String mAndroid = android.os.Buil

android 获取手机信息工具类

package com.yqy.yqy_listviewheadview; import android.content.Context; import android.telephony.TelephonyManager; import android.util.Log; /** * 获取手机信息工具类<br> * 内部已经封装了打印功能,仅仅须要把DEBUG參数改为true就可以<br> * 假设须要更换tag能够直接更改,默觉得KEZHUANG * * @author YQY

android获取手机信息大全

IMEI号,IESI号,手机型号: [java] view plaincopyprint? private void getInfo() { TelephonyManager mTm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); String imei = mTm.getDeviceId(); String imsi = mTm.getSubscriberId(); String mtype = android.os.Buil

android获取手机信息2

IMEI号,IESI号,手机型号: private void getInfo() { TelephonyManager mTm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); String imei = mTm.getDeviceId(); String imsi = mTm.getSubscriberId(); String mtype = android.os.Build.MODEL; // 手机型号 String nume

(转)Android获取手机信息

package com.water.activity; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.telephony.CellLocation; import android.telephony.NeighboringCellInfo; import android.telephony.TelephonyManager; import android.u

Android之Build类.(Android获取手机配置信息 )

一.类结构: java.lang.Object    ? android.os.Build 二.类概述:从系统属性中提取设备硬件和版本信息. 三.内部类: 1.Build.VERSION    各种版本字符串 2.Build.VERSION_CODES    目前已知的版本代码的枚举类 四.常量:UNKNOWN   当一个版本属性不知道时所设定的值.其字符串值为 "unknown" . 五.构造方法: Build () 六.静态属性 1.BOARD   主板:The name of t

Android获取手机相关信息

首先,一个小例子: package com.brio.testid; import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.os.Bundle; import android.provider.Settings.Secure; import android.widget.TextView; public class MainActivity extends Activity {

Android获取手机联系人的姓名和电话

Android获取手机联系人的姓名和电话 主要是用到了跳入手机联系人的intent和获取手机联系人信息的内容提供者,直接上代码 注:此贴是借鉴别人的帖子加了一些自己的东西写出的,原帖地址明日附上: / 首先 我们需要跳入手机通讯录 Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); startActivityForResult(intent, 0); // 之后,我们需要重写