本文概述
传感器可用于监视三维设备的移动或设备环境的变化。
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)SensorEvent类
其实例由系统创建。它提供有关传感器的信息。
4)SensorEventListener接口
当传感器值(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>
活动类
让我们编写代码来打印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();
}
}