1.获得SensorManger对象
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
2.获得指定类型的传感器并注册
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY),
SensorManager.SENSOR_DELAY_GAME);
在OnResume()中注册
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity implements SensorEventListener {
EditText textGRAVITY, textLIGHT; //传感器输出信息的编辑框
private SensorManager sensorManager; //定义传感器管理
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textGRAVITY = (EditText) findViewById(R.id.textGRAVITY); //获取重力传感器输出信息的编辑框
textLIGHT = (EditText) findViewById(R.id.textLIGHT); //获取光线传感器输出信息的编辑框
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); //获取传感器管理
}
@Override
protected void onResume() {
super.onResume();
//为重力传感器注册监听器
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY),
SensorManager.SENSOR_DELAY_GAME);
//为光线传感器注册监听器
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT),
SensorManager.SENSOR_DELAY_GAME);
}
@Override
protected void onPause() { //取消注册监听器
sensorManager.unregisterListener(this);
super.onPause();
}
@Override
protected void onStop() { //取消注册监听器
sensorManager.unregisterListener(this);
super.onStop();
}
@Override
public void onSensorChanged(SensorEvent event) {
float[] values = event.values; //获取X、Y、Z三轴的输出信息
int sensorType = event.sensor.getType(); //获取传感器类型
StringBuilder stringBuilder = null;
switch (sensorType) {
case Sensor.TYPE_GRAVITY:
stringBuilder = new StringBuilder();
stringBuilder.append("X轴横向重力值:");
stringBuilder.append(values[0]);
stringBuilder.append("\nY轴纵向重力值:");
stringBuilder.append(values[1]);
stringBuilder.append("\nZ轴向上重力值:");
stringBuilder.append(values[2]);
textGRAVITY.setText(stringBuilder.toString());
break;
case Sensor.TYPE_LIGHT:
stringBuilder = new StringBuilder();
stringBuilder.append("光的强度值:");
stringBuilder.append(values[0]);
textLIGHT.setText(stringBuilder.toString());
break;
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}
加速度传感器的:
import android.app.Service;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Vibrator;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements SensorEventListener {
private SensorManager sensorManager; //定义传感器管理器
private Vibrator vibrator; //定义振动器
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); // 获取传感器管理器
vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); //获取振动器服务
}
@Override
protected void onResume() {
super.onResume();
//为加速度传感器注册监听器
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_GAME);
}
@Override
public void onSensorChanged(SensorEvent event) {
float[] values = event.values; //获取传感器X、Y、Z三个轴的输出信息
int sensorType = event.sensor.getType(); // 获取传感器类型
if (sensorType == Sensor.TYPE_ACCELEROMETER) { //如果是加速度传感器
//X轴输出信息>15,Y轴输出信息>15,Z轴输出信息>20
if (values[0] > 15 || values[1] > 15 || values[2] > 20) {
Toast.makeText(MainActivity.this, "摇一摇", Toast.LENGTH_SHORT).show();
//创建AlertDialog.Builder对象
AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
alertDialog.setView(R.layout.packet); //添加布局文件
alertDialog.show(); //显示alertDialog
vibrator.vibrate(500); //设置振动器频率
sensorManager.unregisterListener(this); //取消注册监听器
}
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}