一、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.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"/>