您的位置:首页 > 移动开发 > Android开发

Android设备信息、感应器检测

2015-10-29 20:06 1581 查看
近日产品已经上线,开始有时间来做自己的事情,于是就开始学习和巩固一些以前用过的或者学过的技术。昨天写了一个检测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);
// 从传感器管理器中获得全部的传感器列表
List<Sensor>sensorList = sensorManager.getSensorList(Sensor.TYPE_ALL);
//获取所有的感应器
List<Sensor> 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: