android的各种传感器

来源:互联网 发布:淘宝视频下载器破解版 编辑:程序博客网 时间:2024/05/21 17:40

一、android设备里的传感器

android设备有11中传感器

SensorManager manager=(SensorManager) getSystemService(SENSOR_SERVICE);//获取传感Manager

List<Sensor> list = manager.getSensorList(Sensor.TYPE_ALL);获取所有的传感器集合

   通过List中的sensor的方法sensor.getType()获取此传感器的类型;

   android设备有以下传感器:

   Sensor.TYPE_ACCELEROMETER:加速度传感器
   以m/s2为单位测量应用于设备三轴(X、Y、Z)的加速力,包括重力


   Sensor.TYPE_GRAVITY:重力传感器
   以m/s2为单位测量应用于设备三轴(X、Y、Z)的重力


   Sensor.TYPE_AMBIENT_TEMPERATURE:温度传感器
   以摄氏度(°C)为单位测量周围温度。


   Sensor.TYPE_GYROSCOPE:陀螺仪传感器
   以弧度/秒(rad/s)为单位,测量设备围绕三个物理轴(X、Y、Z)的旋转率


   Sensor.TYPE_LIGHT:环境光线传感器 
   以lx为单位,测量周围的亮度等级(照度)


   Sensor.TYPE_LINEAR_ACCELERATION:线性加速度
   以m/s2为单位测量应用于设备三个物理轴(X、Y、Z)的加速力,重力除外


   Sensor.TYPE_MAGNETIC_FIELD:电磁场传感器
   以μT为单位,测量设备周围三个物理轴(x,y,z)的磁场。


   Sensor.TYPE_PRESSURE:压力传感器
   以hPa或mBar为单位来测量周围空气的压力


   Sensor.TYPE_PROXIMITY:距离传感器
   以cm为单位,测量一个对象相对与设备屏幕的距离。这个传感器通常用于判断手持设备是否被举到了一个人的耳朵附近。
   Sensor.TYPE_RELATIVE_HUMIDITY:相对湿度传感器   
   以百分比(%)为单位测量周围的相对湿度

   Sensor.TYPE_ROTATION_VECTOR:旋转矢量
   通过提供设备旋转矢量的三个要素来测量设备的方向


   sensor.getName 获取此传感器的名称
   sensor.getVendor 获取此传感器的产商
   sensor.getVersion 获取此传感器的版本


设置传感器的事件
   SensorManager  Sensor=manager.getDefaultSensor(Sensor.传感器类型);
   manager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_GAME);//对sensor设置监听器第三个值有game fast ui等,数据传输使用的场景,对传感器的数据采集时间间隔不同;

   

监听事件有两个方法

1. public voidonAccuracyChanged(Sensor sensor , int arg1);//当传感器精度变化时调用

2. public voidonSensorChanged(SensorEvent event);//当传感器数据变化时调用

Sensor sensor = event.sensor;//获取监听的传感器

sensor.getType()==Sensor.TYPE_PROXIMITY)判断传感器类型,这里以距离感应器举例,其他的类似

例如:

if(sensor.getType()==Sensor.TYPE_PROXIMITY){
float[] values = event.values;//获取从传感器采集的数据
for(int i=0;i<values.length;i++){
System.out.println(i+" "+values[i]);
}
}
 

可以利用这个判断数值让用户打电话时熄灭屏幕,防止误操作;

最后不要忘记在不需要传感器数据时关掉数据采集,不然它” 根本停不下来“~~

可以在onDestroy方法中写关闭采集

SensorManager manager=(SensorManager) getSystemService(SENSOR_SERVICE);
manager.unregisterListener(this);//括号里写你的监听事件



下面写一个例子

package com.fenghuo.test;import java.util.List;import android.app.Activity;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;import android.os.Bundle;import android.os.Vibrator;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;public class MainActivity extends Activity implements SensorEventListener {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);SensorManager manager=(SensorManager) getSystemService(SENSOR_SERVICE);List<Sensor> list = manager.getSensorList(Sensor.TYPE_ALL);for(Sensor sensor:list){switch (sensor.getType()) {case Sensor.TYPE_ACCELEROMETER:System.out.println("加速度传感器");break;case Sensor.TYPE_GRAVITY:System.out.println("重力传感器");break;case Sensor.TYPE_AMBIENT_TEMPERATURE:System.out.println("温度传感器");break;case  Sensor.TYPE_GYROSCOPE:System.out.println("陀螺仪传感器");break;case Sensor.TYPE_LIGHT:System.out.println("环境光线传感器");break;case Sensor.TYPE_LINEAR_ACCELERATION:System.out.println("线性加速度");break;case Sensor.TYPE_MAGNETIC_FIELD:System.out.println("电磁场传感器");break;case Sensor.TYPE_PRESSURE:System.out.println("压力传感器");break;case Sensor.TYPE_PROXIMITY:System.out.println("距离传感器");break;case Sensor.TYPE_RELATIVE_HUMIDITY:System.out.println("相对湿度传感器");break;case Sensor.TYPE_ROTATION_VECTOR:System.out.println("旋转矢量");break;default:break;}System.out.println(sensor.getName()+" "+sensor.getVendor()+"  "+sensor.getVersion());}Sensor sensor=manager.getDefaultSensor(Sensor.TYPE_PROXIMITY);//manager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_GAME);manager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_GAME);findViewById(R.id.button1).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubVibrator vibrator=(Vibrator) getSystemService(VIBRATOR_SERVICE);vibrator.vibrate(100);}});}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();SensorManager manager=(SensorManager) getSystemService(SENSOR_SERVICE);manager.unregisterListener(this);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic void onAccuracyChanged(Sensor arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onSensorChanged(SensorEvent event) {// TODO Auto-generated method stubSensor sensor = event.sensor;if(sensor.getType()==Sensor.TYPE_PROXIMITY){float[] values = event.values;for(int i=0;i<values.length;i++){System.out.println(i+" "+values[i]);}}}}<span style="color:#00cccc;"></span>

附:震动效果
   Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);//获取震动vibrator 实例

   vibrator.vibrate(500);//500表示震动时长 单位是毫秒,单次震动100比较好,如果需要要长时间震动,最好让震动1000毫秒然后过100毫秒继续~

需要加入权限<uses-permission android:name="android.permission.VIBRATE"/>

0 0