android的各种传感器

一、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 void onAccuracyChanged(Sensor sensor , int arg1);//当传感器精度变化时调用

2. public void onSensorChanged(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"/>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值