Android传感器教程
传感器 可以用来监测设备的三维运动或环境变化。
Android提供了传感器API来处理不同类型的传感器。
传感器类型
Android支持三种类型的传感器:
1) 运动传感器
用于测量沿三个轴的加速力和旋转力。
2) 位置传感器
用于测量设备的物理位置。
3) 环境传感器
用于测量环境的变化,如温度、湿度等。
Android传感器API
Android传感器API提供了许多类和接口。传感器API的重要类和接口如下:
1) SensorManager类
android.hardware.SensorManager 类提供了以下方法:
- 获取传感器实例,
- 访问和列出传感器,
- 注册和注销传感器监听器等。
您可以通过调用getSystemService()方法并将SENSOR_SERVICE常量传递给它来获取SensorManager的实例。
SensorManager sm = (SensorManager)getSystemService(SENSOR_SERVICE);
2) 传感器类
android.hardware.Sensor 类提供了获取传感器信息的方法,例如传感器名称、传感器类型、传感器分辨率等。
3) 传感器事件类
其实例由系统创建。它提供有关传感器的信息。
4) 传感器事件监听接口
它提供了两个回调方法,用于获取传感器值 (x、y 和 z) 更改或传感器精度更改的信息。
公共和抽象方法 | 描述 |
---|---|
void onAccuracyChanged(Sensor sensor, int accuracy) | 当传感器的精度发生变化时调用此方法。 |
void onSensorChanged(SensorEvent event) | 当传感器的值发生变化时调用此方法。 |
Android简单的传感器应用示例
让我们看看两个传感器示例。
- 打印x、y和z轴值的传感器示例。在这里,我们将要看到这个。
- 当设备被摇晃时改变背景颜色的传感器示例。点击以 改变活动传感器示例的背景颜色
activity_main.xml
这个文件中只有一个TextView。
<RelativeLayout xmlns:androclass="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="92dp"
android:layout_marginTop="114dp"
android:text="TextView" />
</RelativeLayout>
Activity类
让我们编写代码,打印出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();
}
}