获得倾斜angular度的Android

我试图从我的android手机获取倾斜angular度,从我的传感器滚动angular度,但迄今为止没有成功,

当我点击我的button应该给我3个angular度,我得到“结果:0.0 -0.0 -0.0”

package com.example; import android.app.Activity; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.widget.TextView; import android.widget.Button; import android.view.View; public class MyActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final float[] mValuesMagnet = new float[3]; final float[] mValuesAccel = new float[3]; final float[] mValuesOrientation = new float[3]; final float[] mRotationMatrix = new float[9]; final Button btn_valider = (Button) findViewById(R.id.btn1); final TextView txt1 = (TextView) findViewById(R.id.textView1); final SensorEventListener mEventListener = new SensorEventListener() { public void onAccuracyChanged(Sensor sensor, int accuracy) { } public void onSensorChanged(SensorEvent event) { // Handle the events for which we registered switch (event.sensor.getType()) { case Sensor.TYPE_ACCELEROMETER: System.arraycopy(event.values, 0, mValuesAccel, 0, 3); break; case Sensor.TYPE_MAGNETIC_FIELD: System.arraycopy(event.values, 0, mValuesMagnet, 0, 3); break; } }; }; btn_valider.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { SensorManager.getRotationMatrix(mRotationMatrix, null, mValuesAccel, mValuesMagnet); SensorManager.getOrientation(mRotationMatrix, mValuesOrientation); final CharSequence test; test = "results: " + mValuesOrientation[0] +" "+mValuesOrientation[1]+ " "+ mValuesOrientation[2]; txt1.setText(test); } }); } } 

Solutions Collecting From Web of "获得倾斜angular度的Android"

您几乎可以使用代码Mike,但为了使任何传感器的事件侦听器都能够检索数据,必须使用以下命令将所需的事件侦听器和传感器注册到SensorManager类中:

 SensorManager _sensorManager; _sensorManager.registerListener(mEventListener, _sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); 

下面是你的代码,适合显示我相信是你想看到的数据。

 import android.app.Activity; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.widget.TextView; import android.widget.Button; import android.view.View; public class StackOverflowTestingGroundActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); SensorManager sensorManager = (SensorManager) this.getSystemService(SENSOR_SERVICE); final float[] mValuesMagnet = new float[3]; final float[] mValuesAccel = new float[3]; final float[] mValuesOrientation = new float[3]; final float[] mRotationMatrix = new float[9]; final Button btn_valider = (Button) findViewById(R.id.btn1); final TextView txt1 = (TextView) findViewById(R.id.textView1); final SensorEventListener mEventListener = new SensorEventListener() { public void onAccuracyChanged(Sensor sensor, int accuracy) { } public void onSensorChanged(SensorEvent event) { // Handle the events for which we registered switch (event.sensor.getType()) { case Sensor.TYPE_ACCELEROMETER: System.arraycopy(event.values, 0, mValuesAccel, 0, 3); break; case Sensor.TYPE_MAGNETIC_FIELD: System.arraycopy(event.values, 0, mValuesMagnet, 0, 3); break; } }; }; // You have set the event lisetner up, now just need to register this with the // sensor manager along with the sensor wanted. setListners(sensorManager, mEventListener); btn_valider.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { SensorManager.getRotationMatrix(mRotationMatrix, null, mValuesAccel, mValuesMagnet); SensorManager.getOrientation(mRotationMatrix, mValuesOrientation); final CharSequence test; test = "results: " + mValuesOrientation[0] +" "+mValuesOrientation[1]+ " "+ mValuesOrientation[2]; txt1.setText(test); } }); } // Register the event listener and sensor type. public void setListners(SensorManager sensorManager, SensorEventListener mEventListener) { sensorManager.registerListener(mEventListener, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); sensorManager.registerListener(mEventListener, sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), SensorManager.SENSOR_DELAY_NORMAL); } }