近日产品已经上线,开始有时间来做自己的事情,于是就开始学习和巩固一些以前用过的或者学过的技术。昨天写了一个检测Android设备的序列号和IMEI以及感应器等等的一个Demo来跟大家分享一下。

在开发中经常要对设备进行识别和唯一标识。我们用到了安卓设备的序列号和设备的MAC号。

  一、首先是获取设备的序列号,在开发的时候我们可以这样来获得。

  1. String serialName = android.os.Build.SERIAL;

  也可以用下面的一个方法来获取设备的序列号

  1. public static String getSerialNumber() {
  2. String serial = null;
  3. try {
  4. Class<?> c = Class.forName("android.os.SystemProperties");
  5. Method get = c.getMethod("get", String.class);
  6. serial = (String) get.invoke(c, "ro.serialno");
  7. System.out.println(serial);
  8. } catch (Exception ignored) {
  9.  
  10. }
  11. return serial;
  12. }

   二、 其次是获取设备的MAC

  1. String getMac() {
  2. String macSerial = null;
  3. String str = "";
  4. try {
  5. Process pp = Runtime.getRuntime().exec(
  6. "cat /sys/class/net/wlan0/address ");
  7. InputStreamReader ir = new InputStreamReader(pp.getInputStream());
  8. LineNumberReader input = new LineNumberReader(ir);
  9.  
  10. for (; null != str;) {
  11. str = input.readLine();
  12. if (str != null) {
  13. macSerial = str.trim();// 去空格
  14. break;
  15. }
  16. }
  17. } catch (IOException ex) {
  18. // 赋予默认值
  19. ex.printStackTrace();
  20. }
  21. return macSerial;
  22. }

  三、获取设备内部的所有传感器:在Android的API里面包括的感应器有  

  1. TYPE_ACCELEROMETER:加速度传感器
  2. TYPE_GRAVITY:重力传感器
  3. TYPE_GYROSCOPE:陀螺仪传感器
  4. TYPE_LIGHT:环境光线传感器
  5. TYPE_LINEAR_ACCELERATION:线性加速度传感器
  6. TYPE_MAGNETIC_FIELD:电磁场传感器
  7. TYPE_ORIENTATION:方向传感器
  8. TYPE_PRESSURE:压力传感器
  9. TYPE_PROXIMITY:距离传感器
  10. TYPE_ROTATION_VECTOR:旋转向量传感器
  11. TYPE_TEMPERATURE:温度传感器

  下面是获取设备传感器的代码

  1. // 从系统服务中获得传感器管理器
  2. SensoraManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
  3. // 从传感器管理器中获得全部的传感器列表
  4. List<Sensor>sensorList = sensorManager.getSensorList(Sensor.TYPE_ALL);
  5. //获取所有的感应器
  6. List<Sensor> allSensors = sm.getSensorList(Sensor.TYPE_ALL);

  然后是对所有的感应器进行一个遍历,并对感应器进行区分

  1. // 显示有多少个传感器
  2. mTvSensor.setText("经检测该手机有" + allSensors.size() + "个传感器,他们分别是:\n");
  3. // 显示每个传感器的具体信息
  4. for (Sensor s : allSensors) {
  5. String tempString = "\n" + " 设备名称:" + s.getName() + "\n"
  6. + " 设备版本:" + s.getVersion() + "\n" + " 供应商:"
  7. + s.getVendor() + "\n";
  8. switch (s.getType()) {
  9. case Sensor.TYPE_ACCELEROMETER:
  10. mTvSensor.setText(mTvSensor.getText().toString() + s.getType()
  11. + " 加速度传感器accelerometer" + tempString);
  12. break;
  13. case Sensor.TYPE_GRAVITY:
  14. mTvSensor.setText(mTvSensor.getText().toString() + s.getType()
  15. + " 重力传感器gravity API 9" + tempString);
  16. break;
  17. case Sensor.TYPE_GYROSCOPE:
  18. mTvSensor.setText(mTvSensor.getText().toString() + s.getType()
  19. + " 陀螺仪传感器gyroscope" + tempString);
  20. break;
  21. case Sensor.TYPE_LIGHT:
  22. mTvSensor.setText(mTvSensor.getText().toString() + s.getType()
  23. + " 环境光线传感器light" + tempString);
  24. break;
  25. case Sensor.TYPE_LINEAR_ACCELERATION:
  26. mTvSensor.setText(mTvSensor.getText().toString() + s.getType()
  27. + " 线性加速器LINEAR_ACCELERATION API 9" + tempString);
  28. break;
  29. case Sensor.TYPE_MAGNETIC_FIELD:
  30. mTvSensor.setText(mTvSensor.getText().toString() + s.getType()
  31. + " 电磁场传感器magnetic field" + tempString);
  32. break;
  33. case Sensor.TYPE_ORIENTATION:
  34. mTvSensor.setText(mTvSensor.getText().toString() + s.getType()
  35. + " 方向传感器orientation" + tempString);
  36. break;
  37. case Sensor.TYPE_PRESSURE:
  38. mTvSensor.setText(mTvSensor.getText().toString() + s.getType()
  39. + " 压力传感器pressure" + tempString);
  40. break;
  41. case Sensor.TYPE_PROXIMITY:
  42. mTvSensor.setText(mTvSensor.getText().toString() + s.getType()
  43. + " 距离传感器proximity" + tempString);
  44. break;
  45. case Sensor.TYPE_ROTATION_VECTOR:
  46. mTvSensor.setText(mTvSensor.getText().toString() + s.getType()
  47. + " 旋转向量ROTATION" + tempString);
  48. break;
  49. case Sensor.TYPE_TEMPERATURE:
  50. mTvSensor.setText(mTvSensor.getText().toString() + s.getType()
  51. + " 温度传感器temperature" + tempString);
  52. break;
  53. default:
  54. mTvSensor.setText(mTvSensor.getText().toString() + s.getType()
  55. + " 未知传感器" + tempString);
  56. break;
  57. }
  58. }

  四、获取设备的存储空间

  1. //获取设备总存储空间
  2. public static long getSDCardSize(){
  3. File path =Environment.getExternalStorageDirectory();
  4. StatFs statFs=new StatFs(path.getPath());
  5. //获得单个数据块的大小
  6. long blockSize=statFs.getBlockSize();
  7. //获得全部数据块的个数
  8. long allBlock=statFs.getBlockCount();
  9. return (allBlock*blockSize)/1024/1024/1024;
  10. }
  11. //获取设备可用的存储空间
  12. public static long getVialableSDCardSize(){
  13. File path =Environment.getExternalStorageDirectory();
  14. StatFs statFs=new StatFs(path.getPath());
  15. //获得单个数据块的大小
  16. long blockSize=statFs.getBlockSize();
  17. //获得可用数据块的个数
  18. long allBlock=statFs.getAvailableBlocks();
  19. return (allBlock*blockSize)/1024/1024/1024;
  20. }

  五、获取设备的时间

  1. public static String systemTime(){
  2. Time time=new Time();
  3. time.setToNow();
  4. return time.year+"年"+time.month+"月"+time.monthDay+"日"+" 星期"+time.weekDay;
  5. }

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

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

    首先你的手机必需要有ROOT权限,误操作有风险需慎重 请先开启手机的USB调试,防止手机改动后无法启动时导致的无法修复 1.假设你是在手机上改动,直接使用RE文件管理器,编辑/system/build ...

  2. Android 开发 获取设备信息与App信息

    设备信息 设备ID(DeviceId) 获取办法 android.telephony.TelephonyManager tm = (android.telephony.TelephonyManager ...

  3. C#:基于WMI查询USB设备信息 及 Android设备厂商VID列表

    /* ---------------------------------------------------------- 文件名称:WMIUsbQuery.cs 作者:秦建辉 MSN:splashc ...

  4. Android 获取设备信息 异常

    /**获取设备信息 * @param c * @return */ public static void setDeviceInfo(Context c,RequestParams params){ ...

  5. 【转】android 安卓APP获取手机设备信息和手机号码的代码示例

    http://blog.csdn.net/changemyself/article/details/7421476 下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓 ...

  6. iOS开发的另类神器:libimobiledevice开源包【类似android adb 方便获取iOS设备信息】

    简介 libimobiledevice又称libiphone,是一个开源包,可以让Linux支持连接iPhone/iPod Touch等iOS设备.由于苹果官方并不支持Linux系统,但是Linux上 ...

  7. 如何查看Android设备上的分区信息

    Android设备上,一般都会存在一块eMMC存储芯片来存放系统和用户数据,甚至部分的引导程序. 一般设备出厂时,各个厂商都会将这块存储芯片分成很多的分区,每个分区内存放不同的内容.具体分区的布局每个 ...

  8. Android 设备,如何root,执行adb shell,查看设备中的数据库信息等【转】

    原文地址: Android 设备,如何root,执行adb shell,查看设备中的数据库信息等

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

    下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓手机.手机SIM卡确保插入手机里.eclipse ADT和android-sdk开发环境 第一步:新建一个andro ...

随机推荐

  1. PetaPoco 存储过程

    1 执行不带参数的存储过程 public List<dynamic> ceshiProc() { string sql = @"EXEC [dbo].[p_ceshi1]&quo ...

  2. 详细分析Orchard的Content、Drivers, Shapes and Placement 类型

    本文原文来自:http://skywalkersoftwaredevelopment.net/blog/a-closer-look-at-content-types-drivers-shapes-an ...

  3. 控件AutoCompleteTextView实现动态匹配输入内容的一种输入框

    <AutoCompleteTextView android:layout_width="match_parent" android:layout_height="w ...

  4. Android Studio下添加引用jar文件和so文件

    博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 博客园: 追风917 安卓开发中我们常会遇到jar文件和so文件的引用,下面介绍下在as下如何添加使用,这里以百度地图s ...

  5. 类 Array Arraylist List Hashtable Dictionary

    总结C# 集合类 Array Arraylist List Hashtable Dictionary Stack Queue  我们用的比较多的非泛型集合类主要有 ArrayList类 和 HashT ...

  6. 非常不错的ASP操作数据库类,支持多数据库MSSQL,ACCESS,ORACLE,MYSQL等

    可同时操作多个不同类型的数据库. 完全不用考虑数据类型的差别,再也不用想字符型字段加不加单引号. 调用非常简单,对数据库的主要操作一般只需要一行代码. 支持mssql事务回滚. 可自动生成和输出sql ...

  7. js获取标签的几种方式

    一:id获取(全部浏览器兼容) document.getElementById(""); <body> <div id="box">&l ...

  8. iOS 获取通讯录里边的电话号码AddressBook

    1  首先导入库 <AddressBook/AddressBook.h> 2 然后在导入#import <AddressBook/AddressBook.h>文件 3 声明   ...

  9. POJ 2942.Knights of the Round Table (双连通)

    简要题解: 意在判断哪些点在一个图的  奇环的双连通分量内. tarjan求出所有的点双连通分量,再用二分图染色判断每个双连通分量是否形成了奇环,记录哪些点出现在内奇环内 输出没有在奇环内的点的数目 ...

  10. spring配置中引入properties

    <context:property-placeholder location="classpath*:db.properties" />