SensorManager对象:
常量:
int TYPE_ACCELEROMETER 加速度
int TYPE_ALL 所有类型,NexusOne默认为 加速度
int TYPE_GYROSCOPE 回转仪(这个不太懂)
int TYPE_LIGHT 光线感应
int TYPE_MAGNETIC_FIELD 磁场
int TYPE_ORIENTATION 定向(指北针)和角度
int TYPE_PRESSUR 压力计
int TYPE_PROXIMITY 距离
int TYPE_TEMPERATURE 温度啦
1. 通过getSystemService(SENSOR_SERVICE)方法获取SensorManager对象
2. 创建一个 SensorListener /*SensorEventListener* /监听器,实现 onAccuracyChanged(int sensor, int accuracy)
和onSensorChanged(int sensor, float[] values)方法
3 在onSensorChanged(int sensor, float[] values)内判断是否为“摇一摇”动作(使用常量 intTYPE_ACCELEROMETER)
4 使用 SensorManager对象的registerListener(SensorListener listener, int sensors, int rate)方法注册监听
参数sensors: 所得到的传感器类型 Sensors sensor=sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
参数rate: SENSOR_DELAY_FASTEST 最灵敏
SENSOR_DELAY_GAME 一般(游戏)
SENSOR_DELAY_NORMAL 比较慢。
SENSOR_DELAY_UI 最慢的
5 使用 SensorManager对象的unregisterListener(SensorListener listener) 取消监听;
常量:
int TYPE_ACCELEROMETER 加速度
int TYPE_ALL 所有类型,NexusOne默认为 加速度
int TYPE_GYROSCOPE 回转仪(这个不太懂)
int TYPE_LIGHT 光线感应
int TYPE_MAGNETIC_FIELD 磁场
int TYPE_ORIENTATION 定向(指北针)和角度
int TYPE_PRESSUR 压力计
int TYPE_PROXIMITY 距离
int TYPE_TEMPERATURE 温度啦
1. 通过getSystemService(SENSOR_SERVICE)方法获取SensorManager对象
2. 创建一个 SensorListener /*SensorEventListener* /监听器,实现 onAccuracyChanged(int sensor, int accuracy)
和onSensorChanged(int sensor, float[] values)方法
3 在onSensorChanged(int sensor, float[] values)内判断是否为“摇一摇”动作(使用常量 intTYPE_ACCELEROMETER)
4 使用 SensorManager对象的registerListener(SensorListener listener, int sensors, int rate)方法注册监听
参数sensors: 所得到的传感器类型 Sensors sensor=sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
参数rate: SENSOR_DELAY_FASTEST 最灵敏
SENSOR_DELAY_GAME 一般(游戏)
SENSOR_DELAY_NORMAL 比较慢。
SENSOR_DELAY_UI 最慢的
5 使用 SensorManager对象的unregisterListener(SensorListener listener) 取消监听;
代码:
1. MainActivity.java
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
public class MainActivity extends Activity
{
private SensorManager sensorManager = null;
private SensorEventListener mListener = null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
mListener = new SensorEventListener()
{
@Override
public void onSensorChanged(SensorEvent event)
{
// TODO Auto-generated method stub
float[] values = event.values;
float x = values[0];
//float y = values[1];
float z = values[2];
int medumValue = 15;
//一般摇一摇动作是其位置在空间的X轴和Z轴上的变动
if (Math.abs(x) > medumValue /*&& Math.abs(y) > medumValue*/ && Math.abs(z) > medumValue)
{
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy)
{
// TODO Auto-generated method stub
}
};
}
@Override
protected void onResume()
{
super.onResume();
//注册监听器
if(sensorManager!= null)
sensorManager.registerListener(mListener, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),sensorManager.SENSOR_DELAY_GAME );
}
@Override
protected void onStop()
{
super.onStop();
//取消监听器
sensorManager.unregisterListener(mListener);
}
@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;
}
}
import android.app.Activity;
import android.os.Bundle;
public class SecondActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
}
}