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() + "个传感器,他们分别是:\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;
    }
时间: 2024-10-25 11:01:38

Android设备信息、感应器检测的相关文章

Shell下获取Android设备信息

使用adb.exe shell进入shell界面,然后通过下列命令即可获取需要的信息 :) 1 // getprop命令可获取很多信息哟 2 // 1.获取厂商名称 3 getprop ro.product.brand 4 // 2.设备型号 5 getprop ro.product.model 6 // 3.安卓版本 7 getprop ro.build.version.release 8 // 4.网卡名称 9 wifi.interface 10 // 5.Google glass系统版本

android设备信息获取

权限:<uses-permission android:name="android.permission.READ_PHONE_STATE" /> import android.app.Activity; import android.app.AlertDialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogI

改动Android设备信息,如改动手机型号为iPhone7黄金土豪版!

首先你的手机必需要有ROOT权限,误操作有风险需慎重 请先开启手机的USB调试,防止手机改动后无法启动时导致的无法修复 1.假设你是在手机上改动,直接使用RE文件管理器,编辑/system/build.prop文件,找到 ro.product.model=k333 ro.product.brand=ss 改成 ro.product.model=iphone7黄金土豪版 ro.product.brand=apple 然后保存,重新启动手机就可以. 2.假设你想在电脑上改动 打开CMD,输入 adb

修改Android设备信息,如修改手机型号为iPhone7黄金土豪版!

首先你的手机必须要有ROOT权限,误操作有风险需谨慎 请先开启手机的USB调试,防止手机修改后无法启动时导致的无法修复 1.如果你是在手机上修改,直接使用RE文件管理器,编辑/system/build.prop文件,找到 ro.product.model=k333 ro.product.brand=ss 改成 ro.product.model=iphone7黄金土豪版 ro.product.brand=apple 然后保存,重启手机即可. 2.如果你想在电脑上修改 打开CMD,输入 adb sh

Android设备网络、屏幕尺寸、SD卡、本地IP、存储空间等信息获取工具类

Android设备网络.屏幕尺寸.SD卡.本地IP.存储空间.服务.进程.应用包名等信息获取的整合工具类. 1 package com.qiyu.ddb.util; 2 3 import android.annotation.SuppressLint; 4 import android.annotation.TargetApi; 5 import android.app.Activity; 6 import android.app.ActivityManager; 7 import androi

android 安卓APP获取手机设备信息和手机号码的代码示例

下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓手机.手机SIM卡确保插入手机里.eclipse ADT和android-sdk开发环境 第一步:新建一个android工程(JinshanTest), 并需要在工程的AndroidManifest.xml文件中,添加权限 <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 图例: 第二步:新建一个工具类

Android ADB命令大全(通过ADB命令查看wifi密码、MAC地址、设备信息、操作文件、查看文件、日志信息、卸载、启动和安装APK等)

ADB很强大,记住一些ADB命令有助于提高工作效率. 1. 获取序列号: adb get-serialno 2. 查看连接计算机的设备: adb devices 3. 重启机器: adb reboot 4. 重启到bootloader,即刷机模式: adb reboot bootloader 5. 重启到recovery,即恢复模式: adb reboot recovery 6. 查看log: adb logcat 7. 终止adb服务进程: adb kill-server 8. 重启adb服务

Android ADB工具-操作手机和获取手设备信息(四)

Android ADB工具-操作手机和获取手设备信息(四) 标签(空格分隔): Android ADB 6. 其他命令 命令 功能 adb shell input text <content> 发送文本内容 adb shell input keyevent <keycode> 发送键盘事件 adb shell wm size 获取设备分辨率 adb shell getprop <key> 获取设备参数信息 adb shell setprop <key> &l

android获取设备信息

public class DeviceInfo { private static Application APP = null; private static String sd_card = Environment.getExternalStorageDirectory()+File.separator+"wlcache"; public static Application getApp() { return APP; } // 获取手机型号 public static Strin