使用簡介
第一步,獲取傳感器的SensorManager實例
SensorManager sensorManager= (SensorManager) getSystemService(Context.SENSOR_SERVICE);
第二步,調用相應的傳感器類型
Sensor sensor=sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT)
第三步,我們需要藉助SensorEventListener對傳感器輸出信號進行監控
private SensorEventListener listener=new SensorEventListener() {
public void onSensorChanged(SensorEvent event) {
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
- onSensorChanged(SensorEvent event)
- 這個方法參數是一個數據,所有的傳感器輸出信息都是存放在這個數組裏面的
註冊和取消註冊傳感器監聽事件
- 註冊的方法有三個參數
- 第一個參數爲SensorEventListener的實例
- 第二個參數爲Sensor的實例
- 第三個參數爲傳感器的更新速率,可選值有四個:SENSOR_DELAY_UI ,SENSOR_DELAY_NORMAL ,SENSOR_DELAY_GAME,SENSOR_DELAY_FASTEST,它們的更新速率依次遞增的。
sensorManager.registerListener(listener,sensor,SensorManager.SENSOR_DELAY_NORMAL)
- 一般我們在onDestory方法中調用取消註冊方法,釋放資源
protected void onDestroy() {
super.onDestroy();
if (sensorManager!=null){
sensorManager.unregisterListener(listener);
}
}
光照傳感器
public class MainActivity extends AppCompatActivity {
public SensorManager sensorManager;
private TextView textView;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sensorManager= (SensorManager) getSystemService(Context.SENSOR_SERVICE);
Sensor sensor=sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
sensorManager.registerListener(listener,sensor,SensorManager.SENSOR_DELAY_NORMAL);
textView= (TextView) findViewById(R.id.textView);
}
private SensorEventListener listener=new SensorEventListener() {
public void onSensorChanged(SensorEvent event) {
textView.setText(event.values[0]+"");
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
@Override
protected void onDestroy() {
super.onDestroy();
if (sensorManager!=null){
sensorManager.unregisterListener(listener);
}
}
}
加速度傳感器
public class MainActivity extends AppCompatActivity {
private SensorManager sensorManager;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sensorManager= (SensorManager) getSystemService(SENSOR_SERVICE);
Sensor sensor=sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener(listener,sensor,SensorManager.SENSOR_DELAY_NORMAL);
}
private SensorEventListener listener=new SensorEventListener() {
public void onSensorChanged(SensorEvent event) {
float x=Math.abs(event.values[0]);
float y=Math.abs(event.values[1]);
float z=Math.abs(event.values[2]);
if (x>15||y>15||z>15){
Toast.makeText(MainActivity.this, "搖一搖啊搖一搖", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
@Override
protected void onDestroy() {
super.onDestroy();
if (sensorManager!=null){
sensorManager.unregisterListener(listener);
}
}
}
- 由於傳感器只能在真機上運行,所以這裏就不再發效果圖了,還請大家自行嘗試效果。