什么是替代Android的方向感应器? [英] What is the alternative to android orientation sensor?
问题描述
嗨我建立一个3D游戏为Android。
我目前正在为一个传感器添加到我的游戏,让玩家倾斜Android作为它的控制。
在理想情况下,我想使用了方向感应器,但我注意到它已经去precated。有谁知道如何检测倾斜,在Android与不使用这种传感器?
有没有实际的方向传感器 - 这是(是)实际上是一个复合传感器,由加速度计和magnometer的组合产生。
从<一个href="http://developer.android.com/reference/android/hardware/SensorEvent.html">http://developer.android.com/reference/android/hardware/SensorEvent.html
这种传感器类型存在遗留原因,请使用<一个href="http://developer.android.com/reference/android/hardware/SensorManager.html#getRotationMatrix%28float%5B%5D,%20float%5B%5D,%20float%5B%5D,%20float%5B%5D%29">getRotationMatrix()在<一个结合href="http://developer.android.com/reference/android/hardware/SensorManager.html#remapCoordinateSystem%28float%5B%5D,%20int,%20int,%20float%5B%5D%29">remapCoordinateSystem()和<一href="http://developer.android.com/reference/android/hardware/SensorManager.html#getOrientation%28float%5B%5D,%20float%5B%5D%29">getOrientation()计算这些值来代替。
公共类OrientationTestActivity扩展活动实现SensorEventListener
{
私人的SensorManager mSensorManager;
私人传感器mAccelerometer;
私人传感器mMagnetometer;
私人浮法[] mLastAccelerometer =新的浮动[3];
私人浮法[] mLastMagnetometer =新的浮动[3];
私人布尔mLastAccelerometerSet = FALSE;
私人布尔mLastMagnetometerSet = FALSE;
私人浮法[] MR =新的浮动[9];
私人浮法[] mOrientation =新的浮动[3];
@覆盖
公共无效的onCreate(包savedInstanceState)
{
super.onCreate(savedInstanceState);
的setContentView(R.layout.main);
mSensorManager =(的SensorManager)getSystemService(SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mMagnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
}
保护无效onResume(){
super.onResume();
mLastAccelerometerSet = FALSE;
mLastMagnetometerSet = FALSE;
mSensorManager.registerListener(这一点,mAccelerometer,SensorManager.SENSOR_DELAY_NORMAL);
mSensorManager.registerListener(这一点,mMagnetometer,SensorManager.SENSOR_DELAY_NORMAL);
}
保护无效的onPause(){
super.onPause();
mSensorManager.unregisterListener(本);
}
公共无效onAccuracyChanged(传感器传感器,诠释精度){
}
公共无效onSensorChanged(SensorEvent事件){
如果(event.sensor == mAccelerometer){
System.arraycopy(event.values,0,mLastAccelerometer,0,event.values.length);
mLastAccelerometerSet =真;
}否则,如果(event.sensor == mMagnetometer){
System.arraycopy(event.values,0,mLastMagnetometer,0,event.values.length);
mLastMagnetometerSet =真;
}
如果(mLastAccelerometerSet&安培;&安培; mLastMagnetometerSet){
SensorManager.getRotationMatrix(MR,空,mLastAccelerometer,mLastMagnetometer);
SensorManager.getOrientation(MR,mOrientation);
Log.i(OrientationTestActivity的String.Format(定位:%F,%F,%F,
mOrientation [0],mOrientation [1],mOrientation [2]));
}
}
}
Hi I am building a 3D game for Android.
I am currently trying to add a sensor to my game that allows the player to tilt the android as its controls.
Ideally I would like to use the ORIENTATION sensor, but I noticed it has been deprecated. Does anyone know how to detect tilt in the android and doesn't use this sensor?
There is no actual "orientation" sensor - this is (was) actually a composite sensor, generated from a combination of the accelerometer and the magnometer.
From http://developer.android.com/reference/android/hardware/SensorEvent.html
"This sensor type exists for legacy reasons, please use getRotationMatrix() in conjunction with remapCoordinateSystem() and getOrientation() to compute these values instead."
public class OrientationTestActivity extends Activity implements SensorEventListener
{
private SensorManager mSensorManager;
private Sensor mAccelerometer;
private Sensor mMagnetometer;
private float[] mLastAccelerometer = new float[3];
private float[] mLastMagnetometer = new float[3];
private boolean mLastAccelerometerSet = false;
private boolean mLastMagnetometerSet = false;
private float[] mR = new float[9];
private float[] mOrientation = new float[3];
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mMagnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
}
protected void onResume() {
super.onResume();
mLastAccelerometerSet = false;
mLastMagnetometerSet = false;
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
mSensorManager.registerListener(this, mMagnetometer, SensorManager.SENSOR_DELAY_NORMAL);
}
protected void onPause() {
super.onPause();
mSensorManager.unregisterListener(this);
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
public void onSensorChanged(SensorEvent event) {
if (event.sensor == mAccelerometer) {
System.arraycopy(event.values, 0, mLastAccelerometer, 0, event.values.length);
mLastAccelerometerSet = true;
} else if (event.sensor == mMagnetometer) {
System.arraycopy(event.values, 0, mLastMagnetometer, 0, event.values.length);
mLastMagnetometerSet = true;
}
if (mLastAccelerometerSet && mLastMagnetometerSet) {
SensorManager.getRotationMatrix(mR, null, mLastAccelerometer, mLastMagnetometer);
SensorManager.getOrientation(mR, mOrientation);
Log.i("OrientationTestActivity", String.format("Orientation: %f, %f, %f",
mOrientation[0], mOrientation[1], mOrientation[2]));
}
}
}
这篇关于什么是替代Android的方向感应器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!