传感器种类
传感器是第二代智能手机的重要标志之一。可以毫不客气地说,现在市面上的Android手机和平板电脑(TV除外)都内置了传感器。否则很多游戏和应用就无法使用了。Android SDK支持的传感器并不是每一部Android设备都支持所有的传感器。大多数Android设备只支持一部分传感器。例如,方向传感器(电子罗盘)、重力传感器(屏幕翻转、赛车游戏等)。
这类传感器在三个轴(X、Y、Z)上测量加速度和旋转角度。包括如下几个传感器。
加速(accelerometer)传感器
重力(gravity)传感器
陀螺仪(gyroscope)传感器
旋转向量(rotational vector )传感器
这类传感器可以测量不同环境的参数,例如,周围环境的空气温度和压强、光照强度和湿度。包括如下几个传感器。
湿度(barometer)传感器
光线(photometer)传感器
温度(thermometer)传感器
这类传感器可以测量设备的物理位置。包括如下几个传感器。
方向(orientation)传感器
磁力(magnetometer)传感器
Android SDK提供了Android sensor framework,可以用来访问当前Android设备内置的传感器。ASF提供了很多类和接口,可以帮助我们完成各种与传感器有关的任务。例如,可以利用ASF完成下面的工作。
* 确定当前Android设备内置了哪些传感器。
ASF允许我们访问很多传感器类型,这些传感器有一些是基于硬件的传感器,还有一些是基于软件的传感器。基于硬件的传感器就是直接以芯片形式嵌入到Android设备中,这些传感器直接从外部环境获取数据,例如,加速传感器、磁场传感器都属于硬件传感器。基于软件的传感器并不是实际的硬件芯片,尽管这些传感器重使用上很像基于硬件的传感器。基于软件的传感器传回的数据本质上也来自于基于硬件的传感器,只是这些数据通常会经过二次加工,也就是说,基于软件的传感器传回的数据可能来自一个或多个基于硬件的传感器,并且有可能Android系统使用某些算法处理了这些数据。所以基于软件的传感器也可以称为虚拟(virtual)传感器或合成(synthetic)传感器。
所有的常量都在Sensor类中定义。
13. TYPE_TEMPERATURE:温度传感器(硬件传感器),从Android4.0(API Level = 14)开始被TYPE_AMBIENT_TEMPERATURE取代。
1 import java.util.List; 2 import android.app.Activity; 3 import android.hardware.Sensor; 4 import android.hardware.SensorManager; 5 import android.os.Bundle; 6 import android.widget.TextView; 7 8 public class Main extends Activity { 9 10 private TextView tvSensors; 11 private SensorManager sensorManager; 12 13 @Override 14 public void onCreate(Bundle savedInstanceState) { 15 super.onCreate(savedInstanceState); 16 setContentView(R.layout.main); 17 18 tvSensors = (TextView) findViewById(R.id.tvSensors); 19 sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 20 List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ALL); 21 for (Sensor sensor : sensors) { 22 tvSensors.append(sensor.getName() + "\n"); 23 } 24 25 } 26 27 }