资讯详情

Android:传感器编程

本教程主要讲解Android传感器编程的基础知识,包括加速传感器(accelerometer)、陀螺仪(gyroscope)、环境光照传感器(light)、磁力传感器(magnetic field)、方向传感器(orientation)、压力传感器(pressure)、距离传感器(proximity)和温度传感器(temperature)。

一、前言

我非常喜欢电脑,但是笔记本电脑还是太大了。不管笔记本电脑有多小,我还是要拿个小包背。智能手机不一样。它完全是一部手机,可以随意装在口袋里。所以我在2002年左右最喜欢玩装备Dell的PDA,2007年最喜欢玩的是N73,2010年最喜欢玩的是Milestone。看到手机的功能越来越强大,智能手机在某些方面甚至比台式机和笔记本电脑更强大。这节课讲的是智能手机比台式机和笔记本电脑强的地方:传感器。

2008年,我非常喜欢我的小白笔记本Macbook,我喜欢玩它的一个小软件。当我拍桌子时,笔记本电脑感到震动,它改变了一张桌子,这让我像个孩子一样拍桌子。这个功能得益于苹果笔记本电脑内置的传感器。

我不知道iPhone手机是第一个在手机上使用各种传感器,但我知道iPhone在手机上使用传感器是最成功的。随后的Android该系统还内置了大量的传感器,这使得Android系统手机和普通诺基亚智能手机Windows CE与智能机相比,它有很多牛气Milestone之后,我的N73还在抽屉的角落里。

从Android1.5开始,系统内置了对多达八种传感器的支持,它们是:加速度传感器(accelerometer)、陀螺仪(gyroscope)、环境光照传感器(light)、磁力传感器(magnetic field)、方向传感器(orientation)、压力传感器(pressure)、距离传感器(proximity)和温度传感器(temperature)。

使用这些传感器,我们可以制作各种有趣的应用程序和游戏。例如,在口袋里摇手机时,手机开始无意识地录音。别担心这很容易做到。我们将在本文的结尾制作这个小应用程序。

本文的学习方法仍在实战中学习。需要提醒的是,模拟器中不能模拟传感器,因此您需要准备一个Android只有真机才能操作例子。

例子:手机传感器清单

我们还是先看程序后解释。

创建一个项目 Lesson37_HelloSensor ,主Activity名字叫 mainActivity.java。

2、UI布局文件main.xml内容如下:

XML/HTML代码

3、mainActivity.java内容如下:

Java代码

packagebasic.android.lesson37;

importjava.util.List;

importandroid.app.Activity;

importandroid.content.Context;

importandroid.hardware.Sensor;

importandroid.hardware.SensorManager;

importandroid.os.Bundle;

importandroid.widget.TextView;

publicclassMainActivityextendsActivity{

/**Calledwhentheactivityisfirstcreated.*/

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

//准备显示信息UI组建

finalTextViewtx1=(TextView)findViewById(R.id.TextView01);

////从系统服务中获得传感器管理器

SensorManagersm=(SensorManager)getSystemService(Context.SENSOR_SERVICE);

////从传感器管理器中获得所有传感器列表

ListallSensors=sm.getSensorList(Sensor.TYPE_ALL);

//显示多少传感器?

tx1.setText("手机经检测有" allSensors.size() "它们是:\n");

///显示每个传感器的具体信息

for(Sensors:allSensors){

StringtempString="\n" "设备名称:" s.getName() "\n" "设备版本:" s.getVersion() "\n" "供应商:"

s.getVendor() "\n";

switch(s.getType()){

caseSensor.TYPE_ACCELEROMETER:

tx1.setText(tx1.getText().toString() s.getType() "加速传感器accelerometer" tempString);

break;

caseSensor.TYPE_GYROSCOPE:

tx1.setText(tx1.getText().toString() s.getType() "陀螺仪传感器gyroscope" tempString);

break;

caseSensor.TYPE_LIGHT:

tx1.setText(tx1.getText().toString() s.getType() "环境光传感器light" tempString);

break;

caseSensor.TYPE_MAGNETIC_FIELD:

tx1.setText(tx1.getText().toString() s.getType() "电磁场传感器magneticfield" tempString);

break;

caseSensor.TYPE_ORIENTATION:

tx1.setText(tx1.getText().toString() s.getType() "方向传感器orientation" tempString);

break;

caseSensor.TYPE_PRESSURE:

tx1.setText(tx1.getText().toString() s.getType() "压力传感器pressure" tempString);

break;

caseSensor.TYPE_PROXIMITY:

tx1.setText(tx1.getText().toString() s.getType() "距离传感器proximity" tempString);

break;

caseSensor.TYPE_TEMPERATURE:

tx1.setText(tx1.getText().toString() s.getType() "温度传感器temperature" tempString);

break;

default:

tx1.setText(tx1.getText().toString() s.getType() "未知传感器" tempString);

break;

}

}

}

}

4、连接真机Milestone,显示结果如下:

0818b9ca8b590ca3270a3433284dd417.png

5.结合以上程序,我们做一些解释。

1)Android所有传感器都属于传感器管理器 SensorManager 获取传感器管理器的方法很简单:

String service_name = Context.SENSOR_SERVICE;

SensorManager sensorMaager = (SensorManager)getSystemService(service_name);

2)现阶段Android支持的传感器有8种,它们分别是:

传感器类型常量

内部整数值

中文名称

Sensor.TYPE_ACCELEROMETER

1

加速度传感器

Sensor.TYPE_MAGNETIC_FIELD

2

磁力传感器

Sensor.TYPE_ORIENTATION

3

方向传感器

Sensor.TYPE_GYROSCOPE

4

陀螺仪传感器

Sensor.TYPE_LIGHT

5

环境光照传感器

Sensor.TYPE_PRESSURE

6

压力传感器

Sensor.TYPE_TEMPERATURE

7

温度传感器

Sensor.TYPE_PROXIMITY

8

距离传感器

3)从传感器管理器中获取其中某个或者某些传感器的方法有如下三种:

第一种:获取某种传感器的默认传感器

Sensor defaultGyroscope = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);

第二种:获取某种传感器的列表

List pressureSensors = sensorManager.getSensorList(Sensor.TYPE_PRESSURE);

第三种:获取所有传感器的列表,我们这个例子就用的第三种

List allSensors = sensorManager.getSensorList(Sensor.TYPE_ALL);

4)对于某一个传感器,它的一些具体信息的获取方法可以见下表:

方法

描述

getMaximumRange()

最大取值范围

getName()

设备名称

getPower()

功率

getResolution()

精度

getType()

传感器类型

getVentor()

设备供应商

getVersion()

设备版本号

标签: 用什么传感器来控制距离传感器太大了怎么办内置传感器类型如何运用传感器os5015传感器03n速度传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台