📅  最后修改于: 2020-10-11 03:54:11             🧑  作者: Mango
传感器可用于监视三维设备的移动或设备环境的变化。
Android提供了传感器api,可与不同类型的传感器一起使用。
Android支持三种类型的传感器:
这些用于测量加速力和旋转力以及三个轴。
这些用于测量设备的物理位置。
这些用于测量环境变化,例如温度,湿度等。
Android传感器api提供了许多类和接口。传感器api的重要类和接口如下:
android.hardware.SensorManager类提供以下方法:
您可以通过调用方法getSystemService()并在其中传递SENSOR_SERVICE常量来获取SensorManager的实例。
SensorManager sm = (SensorManager)getSystemService(SENSOR_SERVICE);
android.hardware.Sensor类提供了获取传感器信息的方法,例如传感器名称,传感器类型,传感器分辨率,传感器类型等。
其实例由系统创建。它提供有关传感器的信息。
当传感器值(x,y和z)改变或传感器精度改变时,它提供了两种回调方法来获取信息。
Public and abstract methods | Description |
---|---|
void onAccuracyChanged(Sensor sensor, int accuracy) | it is called when sensor accuracy is changed. |
void onSensorChanged(SensorEvent event) | it is called when sensor values are changed. |
让我们看两个传感器示例。
该文件中只有一个textview。
让我们编写代码来打印x轴,y轴和z轴的值。
package com.example.sensorsimple;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import android.hardware.SensorManager;
import android.hardware.SensorEventListener;
import android.hardware.SensorEvent;
import android.hardware.Sensor;
import java.util.List;
public class MainActivity extends Activity {
SensorManager sm = null;
TextView textView1 = null;
List list;
SensorEventListener sel = new SensorEventListener(){
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
public void onSensorChanged(SensorEvent event) {
float[] values = event.values;
textView1.setText("x: "+values[0]+"\ny: "+values[1]+"\nz: "+values[2]);
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/* Get a SensorManager instance */
sm = (SensorManager)getSystemService(SENSOR_SERVICE);
textView1 = (TextView)findViewById(R.id.textView1);
list = sm.getSensorList(Sensor.TYPE_ACCELEROMETER);
if(list.size()>0){
sm.registerListener(sel, (Sensor) list.get(0), SensorManager.SENSOR_DELAY_NORMAL);
}else{
Toast.makeText(getBaseContext(), "Error: No Accelerometer.", Toast.LENGTH_LONG).show();
}
}
@Override
protected void onStop() {
if(list.size()>0){
sm.unregisterListener(sel);
}
super.onStop();
}
}