Android SDKでは、以下のような種類のセンサー(Sensor)をサポートしており、
Android1.0/1.1和Android1.5的API略有不同。
支持的感应器种类
Android1.5
Sensor.TYPE_ACCELEROMETER・・・加速度感应器
Sensor.TYPE_MAGNETIC_FIELD・・・地磁感应器
Sensor.TYPE_ORIENTATION・・・方向感应器
Sensor.TYPE_GYROSCOPE・・・陀螺仪感应器
Sensor.TYPE_LIGHT・・・亮度感应器
Sensor.TYPE_PRESSURE・・・压力感应器
Sensor.TYPE_TEMPERATURE・・・温度感应器
Sensor.TYPE_PROXIMITY・・・近程感应器
Android1.0/1.1
SensorManager.SENSOR_ORIENTATION・・・方向感应器
SensorManager.SENSOR_ACCELEROMETER・・・加速度感应器
SensorManager.SENSOR_TEMPERATURE・・・温度感应器
SensorManager.SENSOR_MAGNETIC_FIELD・・・地磁感应器
SensorManager.SENSOR_LIGHT・・・亮度感应器
SensorManager.SENSOR_PROXIMITY・・・近程感应器
SensorManager.SENSOR_TRICORDER・・・三度仪感应器
SensorManager.SENSOR_ORIENTATION_RAW・・・方向感应器
※简单地说
Android1.0/1.1/1.5都支持的有,加速度,地磁,方向,亮度,温度,近程感应器
只支持Android1.5的有,陀螺仪,压力感应器
只支持Android1.0/1.1的有,三度仪感应器
感应器的使用方法
按照下列顺序来使用感应器センサーを使用するには、以下のような手順が必要です。
1.取得SensorManager实例
2.向SensorManager实例登录接受感应器信号的Listener
3.追加响应接收到的感应器动作
1.取得SensorManager实例
SensorManagerは、android.hardwareパッケージに含まれていますが、
SensorManagerのインスタンスは、newで作成するのでなく、
ActivityクラスのメソッドにあるgetSystemService(SENSOR_SERVICE)を呼び出すことで、
SensorManagerのインスタンスを取得します。
2.向SensorManager实例登录接受感应器信号的Listener
Android里接受感应器信号的Listener有
Android1.5中的SensorEventListener、
Android1.0/1.1中的SensorListener
Listener的登录,调用SensorManager实例的registerListener()方法。
Android1.5
第1个参数,接收信号的Listener实例
第2个参数,想接收的感应器类型的列表(List<Sensor>)。
第3个参数,接收频度。
Android1.0/1.1
第1个参数,接收信号的Listener实例
第2个参数,想接收的感应器类型的列表(List<Sensor>)和接受频度的BitField
在不同的设备上,能够使用的感应器是不一样的。
动手之前,最好确认一下想使用的感应器在该设备上能不能被使用。
可以通过确认下列值,来判断感应器能不能被使用。
Android1.5里,SensorManger类getSensorList()方法的返回值里包含的感应器
Android1.0/1.1里,SensorManger类getSensorList()方法的返回的BitField
3.追加响应接收到的感应器动作
在上面的处理2中作为接受感应器信号的Listener,必须在下面的2个方法里追加相应的处理
onAccuracyChanged()、onSensorChanged()がありますので、
具体的可以参照下面的源代码。
package com.adakoda.sensortest;
import java.util.List;
import android.app.Activity;
import android.hardware.Sensor; // 1.5
import android.hardware.SensorEvent; // 1.5
import android.hardware.SensorEventListener; // 1.5
//import android.hardware.SensorListener; // 1.1
import android.hardware.SensorManager;
import android.os.Bundle;
import android.util.Log;
public class SensorTestActivity extends Activity
implements SensorEventListener { // 1.5
// implements SensorListener { // 1.1
private boolean mRegisteredSensor;
private SensorManager mSensorManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mRegisteredSensor = false;
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
}
@Override
protected void onResume() {
super.onResume();
// 1.5
{
List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_ORIENTATION);
if (sensors.size() > 0) {
Sensor sensor = sensors.get(0);
mRegisteredSensor = mSensorManager.registerListener(this,
sensor,
SensorManager.SENSOR_DELAY_FASTEST);
}
}
// // 1.1
// {
// int sensors = mSensorManager.getSensors();
// if ((sensors | SensorManager.SENSOR_ORIENTATION) != 0) {
// mRegisteredSensor = mSensorManager.registerListener(this,
// SensorManager.SENSOR_ORIENTATION,
// SensorManager.SENSOR_DELAY_FASTEST);
// }
// }
}
@Override
protected void onPause() {
if (mRegisteredSensor) {
mSensorManager.unregisterListener(this);
mRegisteredSensor = false;
}
super.onPause();
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) { // 1.5
// public void onAccuracyChanged(int sensor, int accuracy) { // 1.1
}
@Override
public void onSensorChanged(SensorEvent event) { // 1.5
// public void onSensorChanged(int sensor, float[] values) { // 1.1
// 1.5
{
if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) {
// values[0]:
// Azimuth, angle between the magnetic north direction and the Y axis,
// around the Z axis (0 to 359). 0=North, 90=East, 180=South, 270=West
// values[1]:
// Pitch, rotation around X axis (-180 to 180),
// with positive values when the z-axis moves toward the y-axis.
// values[2]:
// Roll, rotation around Y axis (-90 to 90),
// with positive values when the x-axis moves away from the z-axis.
Log.v(”ORIENTATION”,
String.valueOf(event.values[0]) + “, ” +
String.valueOf(event.values[1]) + “, ” +
String.valueOf(event.values[2]));
}
}
// // 1.1
// {
// if (sensor == SensorManager.SENSOR_ORIENTATION) {
// // values[0]:
// // Azimuth, rotation around the Z axis (0<=azimuth<360).
// // 0 = North, 90 = East, 180 = South, 270 = West
// // values[1]:
// // Pitch, rotation around X axis (-180<=pitch<=180),
// // with positive values when the z-axis moves toward the y-axis.
// // values[2]:
// // Roll, rotation around Y axis (-90<=roll<=90),
// // with positive values when the z-axis moves toward the x-axis.
// Log.v(”ORIENTATION”,
// String.valueOf(values[0]) + “, ” +
// String.valueOf(values[1]) + “, ” +
// String.valueOf(values[2]));
// }
// }
}
}
还可以参照下列资源
Android1.5
[Android] Redesigned Sensor Manager APIs(Android1.5) | The type SensorListener is deprecated – adakoda
Androi1.0/1.1
[Android] センサーマネージャー(SensorManager) – adakoda
关于感应器三轴的理解
[Android] センサー(Sensor)のAzimuth/Pitch/Roll – adakoda
Android感应器Sensor的使用
最新推荐文章于 2024-08-17 14:42:52 发布