woops.. figured it out. my coordinate re-mappings (remapCoordinateSystem()) are messed.
The documentation is really helpful - but I still managed to confuse which coordinate system I'm supposed to map to. Thanks anyway! On Wed, Jun 8, 2011 at 7:31 PM, Sheado <[email protected]> wrote: > Hi All, > > I've been using SensorManager with Sensor.TYPE_ORIENTATION for its > pitch/roll values. I want to update the code to support multiple > screen orientations (and while I'm at it get rid of some deprecated > code). > > My current solution is below. The main problem with it, is that if I > set the phone down on the table, the roll does not go to 0. With some > phones, it stays were it last was before being set down. With others, > it fluctuates (noticeably) around some value. > > I've tried looking for the deprecated source in the Android git > source, but could not find exactly where things were being stabilized. > Any help would be appreciated! Maybe somebody at Google could post the > deprecated code? > (please excuse the messy/unoptimized code below:) > public void onSensorChanged( SensorEvent event ) > { > switch( event.sensor.getType() ) > { > case Sensor.TYPE_ACCELEROMETER: > if( gravity == null ) > gravity = event.values.clone(); > // would it help to calculate alpha > every time? > final float alpha = 0.8f; > gravity[0] = alpha * gravity[0] + (1 - > alpha) * event.values[0]; > gravity[1] = alpha * gravity[1] + (1 - > alpha) * event.values[1]; > gravity[2] = alpha * gravity[2] + (1 - > alpha) * event.values[2]; > boolean b = SensorManager.getRotationMatrix( > R, null, gravity, > geomagnetic ); > if( b ) > { > switch( rotation ) > { > case Surface.ROTATION_0: > case Surface.ROTATION_180: > > SensorManager.remapCoordinateSystem( R, > SensorManager.AXIS_MINUS_X, SensorManager.AXIS_Z, outR ); > break; > case Surface.ROTATION_90: > case Surface.ROTATION_270: > > SensorManager.remapCoordinateSystem( R, SensorManager.AXIS_Z, > SensorManager.AXIS_X, outR ); > break; > } > SensorManager.getOrientation( outR, > values ); > roll = (float) Math.toDegrees( > values[2] ); > } > break; > case Sensor.TYPE_MAGNETIC_FIELD: > geomagnetic = event.values.clone(); > break; > } > } > > Thanks! > -Sheado -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

