안드로이드를 공부하고 있는 학생입니다.
지금 센서쪽을 공부하고 있는데
소스 해석이 잘 안되서요
조금이나마 분석을 부탁드려요~

public void onSensorChanged(SensorEvent evt) {
  try {
   killOnError();

   if (evt.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {// 가속도 센서
    // 각 배열의 값은(m/s2)단위로 되어있으며, 좁촉힘(Contact Force)을 측정한다.
    grav[0] = evt.values[0];  // X축에 적용되는 힘
    grav[1] = evt.values[1];  // Y축에 적용되는 힘
    grav[2] = evt.values[2];  // Z축에 적용되는 힘

    augScreen.postInvalidate();
   } else if (evt.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {//자기장 센서
    // 모든 값은 micro-Tesla(uT)단위로 되어있으며, x,y,-z축 주변 자기장을 측정
    mag[0] = evt.values[0];
    mag[1] = evt.values[1];
    mag[2] = evt.values[2];

    augScreen.postInvalidate();
   }

   SensorManager.getRotationMatrix(RTmp, I, grav, mag);
   SensorManager.remapCoordinateSystem(RTmp, SensorManager.AXIS_X, SensorManager.AXIS_MINUS_Z, R);
   

   tempR.set(R[0], R[1], R[2], R[3], R[4], R[5], R[6], R[7], R[8]);

   finalR.toIdentity();
   finalR.prod(m4);
   finalR.prod(m1);
   finalR.prod(tempR);
   finalR.prod(m3);
   finalR.prod(m2);
   finalR.invert();

   histR[rHistIdx].set(finalR);
   rHistIdx++;
   if (rHistIdx >= histR.length)
    rHistIdx = 0;

   smoothR.set(0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f);
   for (int i = 0; i < histR.length; i++) {
    smoothR.add(histR[i]);
   }
   smoothR.mult(1 / (float) histR.length);

   synchronized (ctx.rotationM) {
    ctx.rotationM.set(smoothR);
   }
  } catch (Exception ex) {
   ex.printStackTrace();
  }
 }