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;
        }
  • 相关阅读:
    微引擎的自定义菜单40063错误解决
    jquery 重复事件
    信号量机制DOWN操作和UP操作的详细说明
    每日算法37:Rotate Image (图像旋转)
    讨论嵌入式系统测试方案
    Android 从硬件到应用程序:一步一步爬上去 6 -- 我写的APP测试框架层硬件服务(终点)
    MVC 接受Flash上传图片
    autorun.vbs病毒的清除办法
    【行业翘楚】井田云:化解线上线下冲突让鱼与熊掌皆得
    Tuxedo入门学习
  • 原文地址:https://www.cnblogs.com/BobAdmin/p/4921680.html
Copyright © 2011-2022 走看看