標籤:
近日產品已經上線,開始有時間來做自己的事情,於是就開始學習和鞏固一些以前用過的或者學過的技術。昨天寫了一個檢測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; }
Android裝置資訊、感應器檢測