android手机传感器总结
传感器的分类
动作传感器
加速度传感器
重力传感器
陀螺仪
位置传感器
方向传感器
磁力传感器
环境传感器
温度传感器
压力传感器
亮度传感器
传感器的使用
1.获取SensorManager对象
2.执行SensorManager对象的getdefaultSensor()方法获取Sensor对象
3.获取Sensor对象的各种属性
获取安卓手机中所有传感器
public class MainActivity extends AppCompatActivity {
private Button sensorButton;
//SensorManager用于管理手机中所有传感器
private SensorManager sensorManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
//得到系统服务(传感器服务) 得到SensorManagner对象
sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
//获取Button
sensorButton = (Button)findViewById(R.id.SensorButton);
//给Button绑定监听器
sensorButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//得到手机中所有传感器
List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
for(Sensor sensor : sensors) {
System.out.println(sensor.getName());
}
}
});
}
输出结果
传感器事件概念
传感器在通电的情况下不断地接收数据,我们的应用程序首先会把传感器注册到应用程序上,即告诉安卓操作系统应用程序需要用到某一个或几个传感器。当传感器检测到变化时,就会产生一个传感器事件(是一个对象)。传感器将传感器事件交给应用程序,通过传感器时间对象获取在这一时刻的数据。
如何将传感器注册到应用程序上?
使用SensorManager的registerListener方法
public boolean registerListener(SensorEventListener listener,
Sensor sensor,int rate)
注册监听器registerListener
监听器接口对象,要实现该接口 SensorEventListener listener
传感器对象(注册的是哪一个传感器)Sensor sensor
注册传感器传递数据的时间 int rate
该函数返回的是布尔值,若注册的传感器在当前设备上是可用的,则返回值为真,否则为假。
传感器的采样率
SENSIR_DELAY_NORMAL (200000us)
SENSOR_DELAY_UI (60000us)
SENSOR_DELAY_GAME (20000us)
SENSOE_DELAY_FASTEST (0us)
设置传感器的准则:
尽量使用比较低的传感器采样率,这样对系统的负荷比较小,可以省电
传感器的属性
1.传感器的名称
getName()
2.传感器的制造商
getVendor()
3.传感器功率
getPower()
4.传感器的分辨率
getResolution()
加速度传感器的使用
加速度传感器的作用( 注:看原文)
手机三维坐标系统
主要代码
//得到系统服务(传感器服务) 得到SensorManagner对象
sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
//获取加速度传感器对象
Sensor accelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
//注册传感器
sensorManager.registerListener(new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
//float acc = event.accuracy;
//float lux = event.values[0];
System.out.println("x---->" + event.values[0]);
System.out.println("y---->" + event.values[1]);
System.out.println("z---->" + event.values[2]);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
},accelerometerSensor,SensorManager.SENSOR_DELAY_NORMAL);
输出结果
滤波器过滤加速度
public class MainActivity extends AppCompatActivity {
private Button sensorButton;
private Button sensorButton1;
//重力加速度
private float gravity[] = new float[3];
//直线加速度
private float lineaner_acceleration[] = new float[3];
//SensorManager用于管理手机中所有传感器
private SensorManager sensorManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//得到系统服务(传感器服务) 得到SensorManagner对象
sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
//获取加速度传感器对象
Sensor accelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
//注册传感器
sensorManager.registerListener(new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
final float alpha = 0.8f;
gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];
lineaner_acceleration[0] = event.values[0] - gravity[0];
lineaner_acceleration[1] = event.values[1] - gravity[1];
lineaner_acceleration[2] = event.values[2] - gravity[2];
System.out.println(lineaner_acceleration[0]);
System.out.println(lineaner_acceleration[1]);
System.out.println(lineaner_acceleration[2]);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
},accelerometerSensor,SensorManager.SENSOR_DELAY_NORMAL);
运行结果
光线传感器的使用
主要代码
//得到系统服务(传感器服务) 得到SensorManagner对象
sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
//获取光线传感器对象
Sensor lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
//注册传感器
sensorManager.registerListener(new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
//获取传感器精度和亮度
float acc = event.accuracy;
float lux = event.values[0];
System.out.println("acc---->" + acc);
System.out.println("lux---->" + lux);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
},lightSensor,SensorManager.SENSOR_DELAY_NORMAL);
结果
方向传感器的使用
通过方向传感器可以获取设备与地球磁场北极之间的夹角
获取的值
1.Azimutg:设备围绕z轴旋转的角度,y轴与地磁北极之间的夹角,取值范围在0至360度之间
2.Pitch:设备围绕x轴旋转的角度,当z轴向y轴的正方向旋转时,该值为正数,反之则为负数,取值范围在-180度到180度之间
3.Roll:设备围绕y轴旋转的角度,当z轴向x轴正方向旋转时,该值为正数,反之则为负数,取值范围在-90度到90度之间
主要代码
public class MainActivity extends Activity implements SensorEventListener{
private SensorManager msensorManager;
private Sensor mOrientation;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
msensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
mOrientation = msensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
}
@Override
public void onAccuracyChanged(Sensor sensor,int accuracy){
}
@Override
protected void onResume(){
super.onResume();
msensorManager.registerListener(this,mOrientation,SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause(){
super.onPause();
msensorManager.unregisterListener(this);
}
@Override
public void onSensorChanged(SensorEvent event){
float azimuth_angle = event.values[0];
float pitch_angle = event.values[1];
float roll_angle = event.values[2];
System.out.println("azimuth_angle--->" + azimuth_angle);
System.out.println("pitch_angle--->" + pitch_angle);
System.out.println("roll_angle--->" + roll_angle);
}
}
结果演示
距离传感器的使用
距离传感器的作用
判断设备与其它物体之间的距离
主要代码
public class MainActivity extends Activity implements SensorEventListener{
private SensorManager msensorManager;
private Sensor mProximity;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
msensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
mProximity = msensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
}
@Override
public void onAccuracyChanged(Sensor sensor,int accuracy){
}
@Override
protected void onResume(){
super.onResume();
msensorManager.registerListener(this,mProximity,SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause(){
super.onPause();
msensorManager.unregisterListener(this);
}
@Override
public void onSensorChanged(SensorEvent event){
float distance = event.values[0];
System.out.println("distance--->" + distance);
System.out.println(mProximity.getMaximumRange());
}
}
结果演示
上一篇: 小白笔记(手机端事件)
下一篇: qt 读取手机传感器