Android设备信息、感应器检测

时间:2023-01-19 23:16:37

近日产品已经上线,开始有时间来做自己的事情,于是就开始学习和巩固一些以前用过的或者学过的技术。昨天写了一个检测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设备信息、感应器检测的更多相关文章

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

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

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

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

  3. C&num;:基于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. java文件编译及运行

    1 配置环境变量 使用鼠标右击“我的电脑”->属性->高级->环境变量 系统变量->新建->变量名:JAVA_HOME 变量值:C:\Program Files (x86 ...

  2. AS项目转到eclipse中方法

    手工改,1.在eclipse 上新建一个空的项目;2.点击android studio 中的android 视图,        a.替换as 中的AndroidManifest.xml ->  ...

  3. NBUT 1121 Sakuya&&num;39&semi;s Fly Knife 飞刀(暴力)

    题意:给出一个带有n*m个格子的矩阵,部分格子中有靶子target,现在要从一个没有靶子的格子中射出飞刀数把,飞刀是可穿透靶子的,同一直线上都可以一刀全射掉.现在问在哪个格子射出飞刀,可以在全部射中的 ...

  4. 【转】ant命令总结

    http://feiyeguohai.iteye.com/blog/1295922 ant命令总结 1 Ant是什么?  Apache Ant 是一个基于 Java的生成工具. 生成工具在软件开发中用 ...

  5. 3&period;0、Android Studio构建和运行应用

    默认情况下,Android Studio可以通过简单的点击就会将新的项目部署到虚拟机或者物理设备中.在Instant Run的帮助下,你可以将更改的方法或资源文件直接推送到一个运行的app而无需构建一 ...

  6. HTML(四)

    html表格 table常用标签 1.table标签:声明一个表格 2.tr标签:定义表格中的一行 3.td和th标签:定义一行中的一个单元格,td代表普通单元格,th表示表头单元格 table常用属 ...

  7. EF - Database First 开发方式

    概述 Database First 又叫数据库优先的开发方式,是一种比较旧的开发方式,现在越来越多的企业已经不再使用此种开发方式. 当然,对于一些旧项目进行升级,在已经有了数据库的情况下,使用此种方式 ...

  8. 编写ios和android共用的c&sol;c&plus;&plus;库时 使用iconv的问题&lpar;转&rpar;

    因为在项目中需要同时维护ios和Android,不同的代码不利于开发的便捷和以后的维护,所以在最近的一个项目中,两种手机应用的通信部分打算使用c/c++库来统一编写,ios调用.a静态库,androi ...

  9. iis配置访问错误

    最近换工作,忙着熟悉新的环境,新的框架技术(银行用的EBF),各种碰坑. 总结一下iis配置过程当中遇到的一个坑------ 按照环境搭配手册一步一步的配置,在我机器*问一直报500的错,但是同样的 ...

  10. 160616、jQuery插件之ajaxFileUpload及jqueryeasyui学习资料分享

    第一步:先引入jQuery与ajaxFileUpload插件.注意先后顺序,ajaxFileUpload插件依赖jquery <script src="${base}/mobile/j ...