2010-10-19 14 views
5

क्या यह जानना संभव है कि कैमरे के पूर्वावलोकन को देखते हुए फ़ोन किस दिशा में इंगित कर रहा है, या क्या आपको फोन को एक कंपास की तरह फ्लैट रखना है।एंड्रॉइड दिशा सेंसर

धन्यवाद

+0

आप दिशा में यह इशारा करते हुए है, और 3-अक्ष सेंसर के साथ फोन के रोटेशन प्राप्त कर सकते हैं करना चाहिए। तो आप जो कुछ भी चाहते हैं वह कर सकते हैं। – Falmarri

उत्तर

6

हाँ - निम्नलिखित कोड काम

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); 
} 

}

+0

मैं लॉग में दिशा कैसे मुद्रित कर सकता हूं ???? जिस दिशा में आप दिशा प्राप्त कर रहे हैं ??? –

+0

@Mitesh azimuth मान वह है जिसे आप मुद्रित करना चाहते हैं। Log.d ("दिशा", String.valueOf (azimuth)) नौकरी करना चाहिए। – Richard

+0

@ रिचर्ड :: धन्यवाद .. :) –

संबंधित मुद्दे