कोई वास्तविक "अभिविन्यास" सेंसर नहीं है - यह (था) वास्तव में एक समग्र सेंसर, accelerometer और magnometer का एक संयोजन से उत्पन्न है।
http://developer.android.com/reference/android/hardware/SensorEvent.html
से "यह संवेदक प्रकार विरासत कारणों के लिए मौजूद है, remapCoordinateSystem() और getOrientation() साथ संयोजन के रूप में getRotationMatrix() का इस्तेमाल करें बजाय इन मूल्यों की गणना करने के लिए।"
public class OrientationTestActivity extends Activity implements SensorEventListener
{
private SensorManager mSensorManager;
private Sensor mAccelerometer;
private Sensor mMagnetometer;
private float[] mLastAccelerometer = new float[3];
private float[] mLastMagnetometer = new float[3];
private boolean mLastAccelerometerSet = false;
private boolean mLastMagnetometerSet = false;
private float[] mR = new float[9];
private float[] mOrientation = new float[3];
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mMagnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
}
protected void onResume() {
super.onResume();
mLastAccelerometerSet = false;
mLastMagnetometerSet = false;
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
mSensorManager.registerListener(this, mMagnetometer, SensorManager.SENSOR_DELAY_NORMAL);
}
protected void onPause() {
super.onPause();
mSensorManager.unregisterListener(this);
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor == mAccelerometer) {
System.arraycopy(event.values, 0, mLastAccelerometer, 0, event.values.length);
mLastAccelerometerSet = true;
} else if (event.sensor == mMagnetometer) {
System.arraycopy(event.values, 0, mLastMagnetometer, 0, event.values.length);
mLastMagnetometerSet = true;
}
if (mLastAccelerometerSet && mLastMagnetometerSet) {
SensorManager.getRotationMatrix(mR, null, mLastAccelerometer, mLastMagnetometer);
SensorManager.getOrientation(mR, mOrientation);
Log.i("OrientationTestActivity", String.format("Orientation: %f, %f, %f",
mOrientation[0], mOrientation[1], mOrientation[2]));
}
}
}
क्या कोई इवेंट हैंडलर जैसे getOrientation() कमांड का उपयोग करने के लिए वैसे भी है जैसे अन्य सेंसर का उपयोग कैसे किया जाता है? जो दोनों चुंबकीय और accelerometer सेंसर से मूल्यों की आवश्यकता है - – user1207381
getOrientation() फ़ंक्शन() getRotationMatrix से मूल्यों की आवश्यकता है। तो आप उन सेंसर के लिए अपना सेंसर श्रोता सेट अप करते हैं और उनके लिए प्राप्त मूल्यों को कैश करते हैं। और फिर जब आप सेंसर के लिए नया डेटा प्राप्त करते हैं तो आप अभिविन्यास को फिर से समझ सकते हैं। – JesusFreke
क्या उनका नमूना कोड इन विधियों को एक साथ कैसे उपयोग किया जाता है? मैं इन तरीकों का एक साथ उपयोग करने में सक्षम नहीं हूं। – user1207381