MaxstARSDK  3.5.0
All Classes Functions Variables
SensorController.java
1 /*
2  * Copyright 2016 Maxst, Inc. All Rights Reserved.
3  */
4 package com.maxst.ar;
5 
6 import android.content.Context;
7 import android.hardware.Sensor;
8 import android.hardware.SensorEvent;
9 import android.hardware.SensorEventListener;
10 import android.hardware.SensorManager;
11 
12 import static android.content.Context.SENSOR_SERVICE;
13 
14 class SensorController implements SensorEventListener {
15  private SensorManager mSensorManager;
16  private Sensor mRotVectSensor;
17  private float[] mRotationMatrix = new float[9];
18  private float[] mTruncatedRotationVector = new float[4];
19 
20  static SensorController create(Context context) {
21  SensorController instance = new SensorController(context);
22  MaxstARJNI.setSensorController(instance);
23  return instance;
24  }
25 
26  private SensorController(Context context) {
27  mSensorManager = (SensorManager) context.getSystemService(SENSOR_SERVICE);
28  mRotVectSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR);
29  }
30 
31  static void destroy() {
32  MaxstARJNI.releaseSensorController();
33  }
34 
35  public void start() {
36  mSensorManager.registerListener(this, mRotVectSensor, SensorManager.SENSOR_DELAY_FASTEST);
37  }
38 
39  public void stop() {
40  mSensorManager.unregisterListener(this);
41  }
42 
43  public void onSensorChanged(SensorEvent event) {
44  if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {
45  if (event.values.length > 4) {
46  System.arraycopy(event.values, 0, mTruncatedRotationVector, 0, 4);
47  SensorManager.getRotationMatrixFromVector(mRotationMatrix, mTruncatedRotationVector);
48  } else {
49  SensorManager.getRotationMatrixFromVector(mRotationMatrix, event.values);
50  }
51 
52 // SensorManager.getRotationMatrixFromVector(mRotationMatrix, event.values);
53 /*
54  for(int i=0; i<3; i++) {
55  String line = "";
56  for (int j = 0; j < 3; j++) {
57  line += mRotationMatrix[i*3+j] + ", ";
58  }
59  Log.i("Sensor", line);
60  }
61  Log.i("Sensor", "----------------------");
62 */
63  MaxstARJNI.setNewSensorData(mRotationMatrix);
64  //SensorManager.remapCoordinateSystem(mRotationMatrix,SensorManager.AXIS_X, SensorManager.AXIS_Z, mRotationMatrix);
65  //SensorManager.getOrientation(mRotationMatrix, orientationVals);
66  //orientationVals[0]=(float)Math.toDegrees(orientationVals[0]);
67  //orientationVals[1]=(float)Math.toDegrees(orientationVals[1]);
68  //orientationVals[2]=(float)Math.toDegrees(orientationVals[2]);
69  }
70  }
71 
72  public void onAccuracyChanged(Sensor sensor, int accuracy) {
73  }
74 }