Advertisement
Guest User

Untitled

a guest
Feb 27th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.05 KB | None | 0 0
  1. private void goCompass()
  2. {
  3. Observable.create(new Observable.OnSubscribe<SensorEventListener>()
  4. {
  5. SensorEventListener listener = null;
  6. @Override
  7. public void call(final Subscriber<? super SensorEventListener> subscriber)
  8. {
  9.  
  10. Sensor gsensor;
  11. Sensor msensor;
  12. final float[] mGravity = new float[3];
  13. final float[] mGeomagnetic = new float[3];
  14.  
  15.  
  16.  
  17. listener = new SensorEventListener() {
  18. @Override
  19. public void onSensorChanged(SensorEvent event) {
  20. final float alpha = 0.97f;
  21. Float azimuth = 0f;
  22.  
  23. synchronized (this) {
  24.  
  25. if(switchChecked == false) {
  26. subscriber.onNext(listener);
  27. subscriber.onCompleted();
  28. }
  29.  
  30. if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
  31.  
  32. mGravity[0] = alpha * mGravity[0] + (1 - alpha)
  33. * event.values[0];
  34. mGravity[1] = alpha * mGravity[1] + (1 - alpha)
  35. * event.values[1];
  36. mGravity[2] = alpha * mGravity[2] + (1 - alpha)
  37. * event.values[2];
  38.  
  39. // mGravity = event.values;
  40.  
  41. // Log.e(TAG, Float.toString(mGravity[0]));
  42. }
  43.  
  44. if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
  45. // mGeomagnetic = event.values;
  46.  
  47. mGeomagnetic[0] = alpha * mGeomagnetic[0] + (1 - alpha)
  48. * event.values[0];
  49. mGeomagnetic[1] = alpha * mGeomagnetic[1] + (1 - alpha)
  50. * event.values[1];
  51. mGeomagnetic[2] = alpha * mGeomagnetic[2] + (1 - alpha)
  52. * event.values[2];
  53. // Log.e(TAG, Float.toString(event.values[0]));
  54.  
  55. }
  56.  
  57. float R[] = new float[9];
  58. float I[] = new float[9];
  59. boolean success = SensorManager.getRotationMatrix(R, I, mGravity,
  60. mGeomagnetic);
  61. if (success) {
  62. float orientation[] = new float[3];
  63. SensorManager.getOrientation(R, orientation);
  64.  
  65. azimuth = (float) Math.toDegrees(orientation[0]); // orientation
  66. azimuth = (azimuth + 360) % 360;
  67.  
  68. Log.d("obs", "azimuth (rad): " + azimuth);
  69.  
  70. layout.setRotation(azimuth);
  71. imageView.setRotation(-azimuth);
  72. contlayout.setRotation(azimuth);
  73.  
  74. }
  75. }
  76. }
  77.  
  78. @Override
  79. public void onAccuracyChanged(Sensor sensor, int accuracy) {
  80.  
  81. }
  82.  
  83. };
  84.  
  85. sensorManager = (SensorManager) getActivity()
  86. .getSystemService(Context.SENSOR_SERVICE);
  87. gsensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
  88. msensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
  89.  
  90. sensorManager.registerListener(listener, gsensor,
  91. SensorManager.SENSOR_DELAY_FASTEST);
  92. sensorManager.registerListener(listener, msensor,
  93. SensorManager.SENSOR_DELAY_FASTEST);
  94.  
  95. }
  96. }).observeOn(AndroidSchedulers.mainThread())
  97. .subscribe(new Subscriber<SensorEventListener>() {
  98. @Override
  99. public void onCompleted()
  100. {
  101.  
  102. }
  103.  
  104. @Override
  105. public void onError(Throwable e)
  106. {
  107.  
  108. }
  109.  
  110. @Override
  111. public void onNext(SensorEventListener listener)
  112. {
  113. sensorManager.unregisterListener(listener);
  114.  
  115. }
  116. });
  117.  
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement