Android中支持很多种传感器:
比如加速度,重力的,光感,磁感等等。
在运用该API常用到的两个类和一个接口
SensorManager:传感器管理类;
Sensor:一个描述传感器的类;
SensorEventListener:传感器事件监听类(SensorListener类已过期);
一般运用步骤:
2.实例化一个你需要使用的sensor对象。
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
也可以通过getSensorList()来获取所有的传感器对象,返回一个list;
3.实现传感器监听接口
4.注册传感器
5.反注册传感器
代码例子都很简单简短。
以下附上我以前用到的一个关于加速度的传感器,我用来做摇晃事件监听;
/** * 摇动检测器 * @author Nono * */ public class ShakeDetector implements SensorEventListener{ private static final String TAG = ShakeDetector.class.getSimpleName(); private static final double SHAKE_SHRESHOLD = 7000d; private Context mContext; private long lastTime ; private float last_x; private float last_y; private float last_z; private SensorManager sensorManager; private onShakeListener shakeListener; /** * 构造 * @param context */ public ShakeDetector(Context context){ mContext = context; sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE); } /** * 注册传感器 */ public boolean registerListener() { if (sensorManager != null) { Sensor sensor = sensorManager .getDefaultSensor(Sensor.TYPE_ACCELEROMETER); if (sensor != null) { this.sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_GAME); LogUtil.log(TAG, "registerListener: succeed!!"); return true; } } return false; } /** * 反注册传感器 */ public void unRegisterListener() { if (sensorManager != null) sensorManager.unregisterListener(this); } public void setOnShakeListener(onShakeListener listener){ shakeListener = listener; } public void onSensorChanged(SensorEvent event) { //if (event.sensor.getType() == SensorManager.SENSOR_ACCELEROMETER) { long curTime = java.lang.System.currentTimeMillis(); if ((curTime - lastTime) > 10) { long diffTime = (curTime - lastTime); lastTime = curTime; float x = event.values[0]; float y = event.values[1]; float z = event.values[2]; float speed = Math.abs(x + y + z - last_x - last_y - last_z) / diffTime * 10000; if (speed > SHAKE_SHRESHOLD) { // 检测到摇晃后执行的代码 shakeListener.onShake(); } last_x = x; last_y = y; last_z = z; } //} } public void onAccuracyChanged(Sensor sensor, int accuracy) { // TODO Auto-generated method stub } /** * * @author Nono * */ public interface onShakeListener{ public void onShake(); } }
上面是自己实现的一个关于加速度的传感器类
在Activity中实例化该类,并实现onShakeListener接口
@Override protected void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); super.onCreate(savedInstanceState); mContext = this; mShakeDetector = new ShakeDetector(mContext); mShakeDetector.setOnShakeListener(this);
然后你可以在Activity的几个生命周期中实现它的注册和反注册。
在onshakeListener中onShake方法中做传感器检测到变动的事件处理。
比如加速度,重力的,光感,磁感等等。
在运用该API常用到的两个类和一个接口
SensorManager:传感器管理类;
Sensor:一个描述传感器的类;
SensorEventListener:传感器事件监听类(SensorListener类已过期);
一般运用步骤:
1.通过上下文获取SensorManager的对象。
Context.getSystemService(Context.Sensor_service);2.实例化一个你需要使用的sensor对象。
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
也可以通过getSensorList()来获取所有的传感器对象,返回一个list;
3.实现传感器监听接口
4.注册传感器
5.反注册传感器
代码例子都很简单简短。
以下附上我以前用到的一个关于加速度的传感器,我用来做摇晃事件监听;
/** * 摇动检测器 * @author Nono * */ public class ShakeDetector implements SensorEventListener{ private static final String TAG = ShakeDetector.class.getSimpleName(); private static final double SHAKE_SHRESHOLD = 7000d; private Context mContext; private long lastTime ; private float last_x; private float last_y; private float last_z; private SensorManager sensorManager; private onShakeListener shakeListener; /** * 构造 * @param context */ public ShakeDetector(Context context){ mContext = context; sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE); } /** * 注册传感器 */ public boolean registerListener() { if (sensorManager != null) { Sensor sensor = sensorManager .getDefaultSensor(Sensor.TYPE_ACCELEROMETER); if (sensor != null) { this.sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_GAME); LogUtil.log(TAG, "registerListener: succeed!!"); return true; } } return false; } /** * 反注册传感器 */ public void unRegisterListener() { if (sensorManager != null) sensorManager.unregisterListener(this); } public void setOnShakeListener(onShakeListener listener){ shakeListener = listener; } public void onSensorChanged(SensorEvent event) { //if (event.sensor.getType() == SensorManager.SENSOR_ACCELEROMETER) { long curTime = java.lang.System.currentTimeMillis(); if ((curTime - lastTime) > 10) { long diffTime = (curTime - lastTime); lastTime = curTime; float x = event.values[0]; float y = event.values[1]; float z = event.values[2]; float speed = Math.abs(x + y + z - last_x - last_y - last_z) / diffTime * 10000; if (speed > SHAKE_SHRESHOLD) { // 检测到摇晃后执行的代码 shakeListener.onShake(); } last_x = x; last_y = y; last_z = z; } //} } public void onAccuracyChanged(Sensor sensor, int accuracy) { // TODO Auto-generated method stub } /** * * @author Nono * */ public interface onShakeListener{ public void onShake(); } }
上面是自己实现的一个关于加速度的传感器类
在Activity中实例化该类,并实现onShakeListener接口
@Override protected void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); super.onCreate(savedInstanceState); mContext = this; mShakeDetector = new ShakeDetector(mContext); mShakeDetector.setOnShakeListener(this);
然后你可以在Activity的几个生命周期中实现它的注册和反注册。
在onshakeListener中onShake方法中做传感器检测到变动的事件处理。