近日产品已经上线,开始有时间来做自己的事情,于是就开始学习和巩固一些以前用过的或者学过的技术。昨天写了一个检测Android设备的序列号和IMEI以及感应器等等的一个Demo来跟大家分享一下。
在开发中经常要对设备进行识别和唯一标识。我们用到了安卓设备的序列号和设备的MAC号。
一、首先是获取设备的序列号,在开发的时候我们可以这样来获得。
String serialName = android.os.Build.SERIAL;
也可以用下面的一个方法来获取设备的序列号
public static String getSerialNumber() { String serial = null; try { Class c = Class.forName("android.os.SystemProperties"); Method get = c.getMethod("get", String.class); serial = (String) get.invoke(c, "ro.serialno"); System.out.println(serial); } catch (Exception ignored) { } return serial; }
二、 其次是获取设备的MAC
String getMac() { String macSerial = null; String str = ""; try { Process pp = Runtime.getRuntime().exec( "cat /sys/class/net/wlan0/address "); InputStreamReader ir = new InputStreamReader(pp.getInputStream()); LineNumberReader input = new LineNumberReader(ir); for (; null != str;) { str = input.readLine(); if (str != null) { macSerial = str.trim();// 去空格 break; } } } catch (IOException ex) { // 赋予默认值 ex.printStackTrace(); } return macSerial; }
三、获取设备内部的所有传感器:在Android的API里面包括的感应器有
TYPE_ACCELEROMETER:加速度传感器TYPE_GRAVITY:重力传感器TYPE_GYROSCOPE:陀螺仪传感器TYPE_LIGHT:环境光线传感器TYPE_LINEAR_ACCELERATION:线性加速度传感器TYPE_MAGNETIC_FIELD:电磁场传感器TYPE_ORIENTATION:方向传感器TYPE_PRESSURE:压力传感器TYPE_PROXIMITY:距离传感器TYPE_ROTATION_VECTOR:旋转向量传感器TYPE_TEMPERATURE:温度传感器
下面是获取设备传感器的代码
// 从系统服务中获得传感器管理器 SensoraManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);// 从传感器管理器中获得全部的传感器列表 ListsensorList = sensorManager.getSensorList(Sensor.TYPE_ALL);//获取所有的感应器 List allSensors = sm.getSensorList(Sensor.TYPE_ALL);
然后是对所有的感应器进行一个遍历,并对感应器进行区分
// 显示有多少个传感器 mTvSensor.setText("经检测该手机有" + allSensors.size() + "个传感器,他们分别是:\n"); // 显示每个传感器的具体信息 for (Sensor s : allSensors) { String tempString = "\n" + " 设备名称:" + s.getName() + "\n" + " 设备版本:" + s.getVersion() + "\n" + " 供应商:" + s.getVendor() + "\n"; switch (s.getType()) { case Sensor.TYPE_ACCELEROMETER: mTvSensor.setText(mTvSensor.getText().toString() + s.getType() + " 加速度传感器accelerometer" + tempString); break; case Sensor.TYPE_GRAVITY: mTvSensor.setText(mTvSensor.getText().toString() + s.getType() + " 重力传感器gravity API 9" + tempString); break; case Sensor.TYPE_GYROSCOPE: mTvSensor.setText(mTvSensor.getText().toString() + s.getType() + " 陀螺仪传感器gyroscope" + tempString); break; case Sensor.TYPE_LIGHT: mTvSensor.setText(mTvSensor.getText().toString() + s.getType() + " 环境光线传感器light" + tempString); break; case Sensor.TYPE_LINEAR_ACCELERATION: mTvSensor.setText(mTvSensor.getText().toString() + s.getType() + " 线性加速器LINEAR_ACCELERATION API 9" + tempString); break; case Sensor.TYPE_MAGNETIC_FIELD: mTvSensor.setText(mTvSensor.getText().toString() + s.getType() + " 电磁场传感器magnetic field" + tempString); break; case Sensor.TYPE_ORIENTATION: mTvSensor.setText(mTvSensor.getText().toString() + s.getType() + " 方向传感器orientation" + tempString); break; case Sensor.TYPE_PRESSURE: mTvSensor.setText(mTvSensor.getText().toString() + s.getType() + " 压力传感器pressure" + tempString); break; case Sensor.TYPE_PROXIMITY: mTvSensor.setText(mTvSensor.getText().toString() + s.getType() + " 距离传感器proximity" + tempString); break; case Sensor.TYPE_ROTATION_VECTOR: mTvSensor.setText(mTvSensor.getText().toString() + s.getType() + " 旋转向量ROTATION" + tempString); break; case Sensor.TYPE_TEMPERATURE: mTvSensor.setText(mTvSensor.getText().toString() + s.getType() + " 温度传感器temperature" + tempString); break; default: mTvSensor.setText(mTvSensor.getText().toString() + s.getType() + " 未知传感器" + tempString); break; } }
四、获取设备的存储空间
//获取设备总存储空间public static long getSDCardSize(){ File path =Environment.getExternalStorageDirectory(); StatFs statFs=new StatFs(path.getPath()); //获得单个数据块的大小 long blockSize=statFs.getBlockSize(); //获得全部数据块的个数 long allBlock=statFs.getBlockCount(); return (allBlock*blockSize)/1024/1024/1024; }//获取设备可用的存储空间 public static long getVialableSDCardSize(){ File path =Environment.getExternalStorageDirectory(); StatFs statFs=new StatFs(path.getPath()); //获得单个数据块的大小 long blockSize=statFs.getBlockSize(); //获得可用数据块的个数 long allBlock=statFs.getAvailableBlocks(); return (allBlock*blockSize)/1024/1024/1024; }
五、获取设备的时间
public static String systemTime(){ Time time=new Time(); time.setToNow(); return time.year+"年"+time.month+"月"+time.monthDay+"日"+" 星期"+time.weekDay; }