大佬教程收集整理的这篇文章主要介绍了android – 横向模式下的音高问题,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
与此相同的任务:http://groups.google.com/group/android-beginners/browse_thread/thread/c691bbac3e294c7c?pli=1
private void ReadOrientationSensor(){ final SensoRMANager sensoRMANager; final TextView text = (TextView) this.findViewById(R.id.TextView01); sensoRMANager = (SensoRMANager) getSystemservice(Context.SENSOR_serviCE); Sensor sensor = sensoRMANager.getDefaultSensor(Sensor.TYPE_ORIENTATION); SensorEventListener listener = new SensorEventListener() { @Override public void onAccuracyChanged(Sensor sensor,int accuracy) { } @Override public void onSensorChanged(SensorEvent event) { float x,y,z; x=event.values[0]; y=event.values[1]; z=event.values[2]; //text.setText(String.valueOf(event.values[0])); text.setText("x: " + x + " y: " + y + " z: " + z); } }; sensoRMANager.registerListener(listener,sensor,SensoRMANager.SENSOR_DELAY_FASTEST);
}
阅读设备方向也给我带来了一些麻烦.这是我用于需要设备方向的活动的基类:
public abstract class SensOractivity extends Activity implements SensorEventListener { private SensoRMANager sensoRMANager; private final float[] accelerometerValues = new float[3]; private final float[] R = new float[9]; private final float[] I = new float[9]; private final float[] orientation = new float[3]; private final float[] remappedR = new float[9]; private final List<HasOrientation> observers = new ArrayList<HasOrientation>(); privatE int x; privatE int y; protected SensOractivity() { this(SensoRMANager.AXIS_X,SensoRMANager.AXIS_Y); } /** * Initializes a new instance. * */ protected SensOractivity(int x,int y) { setAxismapping(x,y); } /** * The parameters specify how to map the axes of the device to the axes of * the sensor coordinate system. * * The device coordinate system has its x-axis poinTing from left to right along the * display,the y-axis is poinTing up along the display and the z-axis is poinTing * upWARD. * * The <code>x</code> parameter defines the direction of the sensor coordinate system's * x-axis in device coordinates. The <code>y</code> parameter defines the direction of * the sensor coordinate system's y-axis in device coordinates. * * For example,if the device is laying on a flat table with the display poinTing up,* specify <code>SensoRMANager.AXIS_X</code> as the <code>x</code> parameter and * <code>SensoRMANager.AXIS_Y</code> as the <code>y</code> parameter. * If the device is mounted in a car in landscape mode,* specify <code>SensoRMANager.AXIS_Z</code> as the <code>x</code> parameter and * <code>SensoRMANager.AXIS_MINUS_X</code> as the <code>y</code> parameter. * * @param x specifies how to map the x-axis of the device. * @param y specifies how to map the y-axis of the device. */ public void setAxismapping(int x,int y) { this.x = x; this.y = y; } /** * Registers an orientation observer. * * @param hasOrientation is the observer to register. */ protected void register(HasOrientation hasOrientation) { observers.add(hasOrientation); } @Override protected void onCreate(Bundle savedInstanceStatE) { super.onCreate(savedInstanceStatE); sensoRMANager = (SensoRMANager)getSystemservice(Context.SENSOR_serviCE); } @Override protected void onResume() { super.onResume(); sensoRMANager.registerListener(this,sensoRMANager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),SensoRMANager.SENSOR_DELAY_UI); sensoRMANager.registerListener(this,sensoRMANager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensoRMANager.SENSOR_DELAY_UI); } @Override protected void onPause() { sensoRMANager.unregisterListener(this); super.onPause(); } public void onAccuracyChanged(Sensor sensor,int accuracy) { } public void onSensorChanged(SensorEvent event) { switch(event.sensor.getType()) { case Sensor.TYPE_ACCELEROMETER: System.arraycopy(event.values,accelerometerValues,accelerometerValues.length); break; case Sensor.TYPE_MAGNETIC_FIELD: if (SensoRMANager.getRotationMatrix(R,I,event.values)) { if (SensoRMANager.remapCoordinateSystem(R,x,remappedR)) { SensoRMANager.getOrientation(remappedR,orientation); for (HasOrientation observer : observers) { observer.onOrientation(Orientation.fromradians(orientation)); } } } break; default: throw new IllegalArgumentexception("unkNown sensor type"); } } }
定位是这样的:
/** * An angular direction vector. * * The vector consists of three angles {azimuth,pitch,roll}. Within a body-fixed * cartesian system,the values of these angles define rotations of the three body axes. * * All angles are in degrees. * * @author michael@mictale.com * */ public class Orientation { /** * Represents the angle to rotate the up axis. */ public float azimuth; /** * Represents the angle to rotate the axis poinTing right. */ public float pitch; /** * Represents the angle to rotate the forWARD axis. */ public float roll; /** * Initializes an instance that is empty. */ public Orientation() { } /** * Initializes an instance from the specified rotation values in degrees. * * @param azimuth is the azimuth angle. * @param pitch is the pitch angle. * @param roll is the roll angle. */ public Orientation(float azimuth,float pitch,float roll) { this.azimuth = azimuth; this.pitch = pitch; this.roll = roll; } /** * Sets the current values to match the specified orientation. * * @param o is the orientation to copy. */ public void setTo(Orientation o) { this.azimuth = o.azimuth; this.pitch = o.pitch; this.roll = o.roll; } /** * Normalizes the current instance. * * Limits the azimuth to [0...360] and pitch and roll to [-180...180]. */ public void normalize() { azimuth = Angle.normalize(azimuth); pitch = Angle.tilt(pitch); roll = Angle.tilt(roll); } /** * Creates a new vector from an array of radian values in the form * [azimuth,roll]. * * This method is useful to fill sensor data into a vector. * * @param vec is the array of radians. * @return the vector. */ public static Orientation fromradians(float[] veC) { return new Orientation((float)Math.todegrees(vec[0]),(float)Math.todegrees(vec[1]),(float)Math.todegrees(vec[2])); } @Override public String toString() { return "{a=" + azimuth + ",p=" + pitch + ",r=" + roll + "}"; } }
您需要调用setAxismapping()来接收与纵向或横向模式对齐的方向.我只在构造函数中调用它,所以我无法告诉你在活动运行时调用它会发生什么.您可能必须重置矩阵.
以上是大佬教程为你收集整理的android – 横向模式下的音高问题全部内容,希望文章能够帮你解决android – 横向模式下的音高问题所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。