android的各种传感器

时间:2023-02-14 15:41:15

一、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 {

@Override
protected 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() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Vibrator vibrator=(Vibrator) getSystemService(VIBRATOR_SERVICE);
vibrator.vibrate(100);
}
});
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
SensorManager manager=(SensorManager) getSystemService(SENSOR_SERVICE);
manager.unregisterListener(this);
}

@Override
public 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;
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
// TODO Auto-generated method stub

}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
Sensor 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"/>