zoukankan      html  css  js  c++  java
  • Android设备信息、感应器检测

    近日产品已经上线,开始有时间来做自己的事情,于是就开始学习和巩固一些以前用过的或者学过的技术。昨天写了一个检测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() + "个传感器,他们分别是:
    ");
            // 显示每个传感器的具体信息
            for (Sensor s : allSensors) {
                String tempString = "
    " + "  设备名称:" + s.getName() + "
    "
                        + "  设备版本:" + s.getVersion() + "
    " + "  供应商:"
                        + s.getVendor() + "
    ";
                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;
        }
  • 相关阅读:
    Path Sum II
    Convert Sorted Array to Binary Search Tree
    Construct Binary Tree from Inorder and Postorder Traversal
    Construct Binary Tree from Preorder and Inorder Traversal
    Maximum Depth of Binary Tree
    Binary Tree Zigzag Level Order Traversal
    Binary Tree Level Order Traversal
    Same Tree
    Validate Binary Search Tree
    Binary Tree Inorder Traversal
  • 原文地址:https://www.cnblogs.com/BobAdmin/p/4921680.html
Copyright © 2011-2022 走看看