2010-07-07 23 views
5

का अजीब व्यवहार मुझे अपने फोन का अभिविन्यास पुनर्प्राप्त करने की आवश्यकता है।एंड्रॉइड - सेंसर मैनेजर getOrientation

public void onSensorChanged(SensorEvent event) { 
    switch (event.sensor.getType()){ 
    case Sensor.TYPE_MAGNETIC_FIELD: 
    this.mag_vals = event.values.clone(); 
    this.sensorReady = true; 
    break; 
    case Sensor.TYPE_ACCELEROMETER: 
    this.acc_vals = event.values.clone(); 
    break; 
    } 
    if (this.mag_vals != null && this.acc_vals != null && this.sensorReady) { 
    this.sensorReady = false; 
    float[] R = new float[ProjectConstants.SIZE_MATRIX]; 
    float[] I = new float[ProjectConstants.SIZE_MATRIX]; 
    SensorManager.getRotationMatrix(R, I, this.acc_vals, this.mag_vals); 

    SensorManager.getOrientation(R, this.actual_orientation); 
    ... 

इस कोड को अगर मैं एक सपाट सतह पर फोन छोड़ दो और मैं सतह पर यह बारी बारी से मेरे फोन के उन्मुखीकरण पाने के लिए अनुमति देता है: इस समय मैं इस लिखा था।

मुझे समझ में नहीं आया कि क्यों मैं फोन को this.actual_orientation[0] के मान को ऊपर ले जाता हूं, जो ज़ेड अक्ष पर घूर्णन है [यहां] [1], मान बढ़ता है हालांकि कोई रोटेशन नहीं था।

क्या किसी को पता था कि क्या होता है?

संपादित

एक और अजीब बात ..

मैं काम पर कार्यालय में अपने आवेदन की कोशिश की और यह अजीब व्यवहार मैं पहले वर्णित .. मैं एक ही कार्यालय में करने की कोशिश की (एक ही स्थिति थी) एक कंपास ऐप जिसे मैंने बाजार से लिया था और इसमें मेरा वही व्यवहार है..जब मैंने फ़ोन को ऊपर की तरफ ले जाया तो मूल्य लगातार बदल गया .. मैंने उसी कार्यालय (उसी स्थिति) में आई-फोन कंपास और इसे करने की कोशिश की उस अजीब व्यवहार नहीं था!

फिर जब मैं घर पर पहुंचे मैं करने की कोशिश की दोनों, अपने आवेदन अपने Android फ़ोन की कम्पास अनुप्रयोग, और वे !! काम किया है, भले ही मैं ऊपर की तरफ फोन मूल्य स्थिर रहे हैं के लिए कदम ...

धन्यवाद एक बहुत।

[1]: http://developer.android.com/reference/android/hardware/SensorManager.html#getOrientation(float[], [] फ्लोट)

उत्तर

4

उन्मुखीकरण अनुमान डिवाइस द्वारा प्राप्त स्थानीय चुंबकीय क्षेत्र दिशा पर भाग में निर्भर करता है। इमारतों के भीतर, लौह संरचनाओं और निकट विद्युत उपकरणों के पास चुंबकीय क्षेत्र को महसूस किया गया है कि पैर में मापा दूरी से काफी भिन्न हो सकता है। इस प्रभाव को हाथ से आयोजित मैग्नेटोमीटर या गॉस-मीटर के साथ आसानी से देखा जा सकता है।

मुझे संदेह है कि ये विकृति आपके अनुप्रयोगों के अजीब व्यवहार के लिए ज़िम्मेदार हैं।

1

जब आप इसे उठाते हैं तो आप एक रोटेशन कोण पेश करते हैं और यह getOrientation में वापसी मानों को प्रभावित करता है। रोटेशन कोण सामान्य स्थिति से आपके डिवाइस की रोटेशन की मात्रा को मापता है, यानी अधिकांश डिवाइस के लिए जहां सामान्य स्थिति पोर्ट्रेट का मतलब है तो फोन लैंडस्केप ओरिएंटेशन में है, तो रोटेशन कोण 90 या -90 होगा। तो यदि आप सही पठन चाहते हैं तो आपको ऑरेंटेशन प्राप्त करने के लिए कॉल से पहले रीमैप कोऑर्डिनेट सिस्टम को कॉल करना होगा।

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