es posible saber qué dirección está apuntando el teléfono mientras mira la vista previa de la cámara, o tiene que tener el teléfono plano como una brújula.Sensor de dirección de Android
Gracias
es posible saber qué dirección está apuntando el teléfono mientras mira la vista previa de la cámara, o tiene que tener el teléfono plano como una brújula.Sensor de dirección de Android
Gracias
Sí - El siguiente código debe hacer el trabajo
public class Test extends Activity implements SensorEventListener{
public static float swRoll;
public static float swPitch;
public static float swAzimuth;
public static SensorManager mSensorManager;
public static Sensor accelerometer;
public static Sensor magnetometer;
public static float[] mAccelerometer = null;
public static float[] mGeomagnetic = null;
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent event) {
// onSensorChanged gets called for each sensor so we have to remember the values
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
mAccelerometer = event.values;
}
if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
mGeomagnetic = event.values;
}
if (mAccelerometer != null && mGeomagnetic != null) {
float R[] = new float[9];
float I[] = new float[9];
boolean success = SensorManager.getRotationMatrix(R, I, mAccelerometer, mGeomagnetic);
if (success) {
float orientation[] = new float[3];
SensorManager.getOrientation(R, orientation);
// at this point, orientation contains the azimuth(direction), pitch and roll values.
double azimuth = 180 * orientation[0]/Math.PI;
double pitch = 180 * orientation[1]/Math.PI;
double roll = 180 * orientation[2]/Math.PI;
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
accelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
magnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
}
@Override
protected void onResume() {
super.onResume();
mSensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_GAME);
mSensorManager.registerListener(this, magnetometer, SensorManager.SENSOR_DELAY_GAME);
}
@Override
protected void onPause() {
super.onPause();
mSensorManager.unregisterListener(this, accelerometer);
mSensorManager.unregisterListener(this, magnetometer);
}
}
¿cómo puedo imprimir la dirección en el registro ??? ¿En qué variable estás obteniendo la dirección? –
@Mitesh El valor de azimut es el que debería estar buscando imprimir. Log.d ("direction", String.valueOf (azimuth)) debería hacer el trabajo. – Richard
@Richard :: Gracias .. :) –
Puede obtener la dirección en la que apunta, y la rotación del teléfono a lo largo de los sensores de 3 ejes. Entonces puedes hacer lo que quieras. – Falmarri