2010-07-04 6 views
16

मैं Google एंड्रॉइड 2.1 में एक ऐप लिख रहा हूं जिसे यह जानने की जरूरत है कि कौन सी दिशा (एन/डब्ल्यू/एस/ई) डिवाइस (एचटीसी हीरो) का सामना करना पड़ रहा है। सेंसर और उसका श्रोता महान काम कर रहे हैं, लेकिन सेंसर से प्राप्त मूल्य पूरी तरह से क्रोधित हैं। जैसे यह मुझे बताता है कि डिवाइस को एसडब्ल्यू का सामना करना पड़ रहा है जब मैं उत्तर का सामना कर रहा हूं ...एंड्रॉइड में अभिविन्यास सेंसर को कैलिब्रेट करने के लिए कैसे?

यह एंड्रॉइड उपकरणों के साथ एक ज्ञात समस्या प्रतीत होता है।

  • उपकरणों वापस

यह माना जाता है पर एक आठ

  • नल की तरह डिवाइस के आसपास
  • कदम डिवाइस हिला: "समाधान" मैं इस तरह वेब पर पाया नज़र सेंसर पुनरावृत्ति ट्रिगर करें। और: "चारों ओर घूमने" के साथ काम मेरे लिए काम करता है ... लेकिन यह बहुत पेशेवर नहीं है मुझे लगता है ...

    तो - मैं एसडीके से अभिविन्यास सेंसर की पुनरावृत्ति कैसे ट्रिगर करूं? मुझे सेंसर को बिना किसी फैंसी स्टफ के ठीक से कैलिब्रेटेड करने की ज़रूरत है जो इस ऐप के उपयोगकर्ताओं को अपने बेवकूफ़ों को "मैन्युअल रूप से" रीयलिब्रेट करने के दौरान पूर्ण बेवकूफों की तरह दिखता है ...

    क्या यह "सही" करने का कोई तरीका है?

    संपादित करें:

    या: वहाँ प्रोग्राम के रूप में निर्धारित करने के लिए, डिवाइस ठीक से कैलिब्रेटेड या नहीं है, तो किसी भी तरह से है? फ़ॉलबैक-विकल्प के रूप में बोलने के लिए ... तो मैं उपयोगकर्ता को चेतावनी दे सकता था कि डिवाइस को "मैन्युअल" पुनरावृत्ति की आवश्यकता है।

  • +1

    एक बार जब मैं बाजार पर एक कंपास अनुप्रयोग देखता हूं। चुंबकीय क्षेत्र कर्षण खराब होने पर यह एप्लिकेशन एक संदेश देता है। मुझे नहीं पता कि यह कैसे काम करता है इसलिए मुझे इस जवाब में दिलचस्पी है – Michel

    उत्तर

    3

    मुझे विश्वास नहीं है कि यदि आप कंपास सेंसर को सही तरीके से कैलिब्रेटेड करते हैं तो प्रोग्रामिंग के बारे में जानने का कोई तरीका नहीं है जब तक कि आप जीपीएस जैसे माध्यमिक डेटा स्रोत का उपयोग न करें। यदि आप जीपीएस का उपयोग कर सकते हैं तो जब उपयोगकर्ता आगे बढ़ रहा है तो आप कंपास शीर्षक और सही के साथ जीपीएस आंदोलन की तुलना कर सकते हैं। याद रखें कि स्थानीय चुंबकीय क्षेत्र कंपास रीडिंग को खराब कर सकते हैं और डिवाइसों को कोई जानकारी नहीं है कि क्या आप जंगल के बीच में हैं या ट्रांसफॉर्मर के बगल में हैं।

    इन माइक्रो उपकरणों के साथ हमेशा एक छोटा सा स्काई होता है जिसके साथ आपको निपटना होगा। यदि आप एक्सीलरोमीटर के लिए मानों की जांच करते हैं, तो आप देखेंगे कि बाकी में वे हमेशा 9.8 मीटर/एस^2 (या कम से कम लगातार उपकरणों के बीच) नहीं लौट रहे हैं।

    आपकी मदद से आपको उपयोगकर्ता को कंपास को रीसेट करने के लिए आठ अंकों में घुमाने/मोड़ने के लिए कहने की आवश्यकता हो सकती है।

    +0

    आपके उत्तर के लिए धन्यवाद, लेकिन दुख की बात है कि मैं इस ऐप के भीतर जीपीएस का उपयोग नहीं कर सकता। समस्या यह है कि, मेरे एचटीसी नायक ने मुझे हर समय कुल बकवास वापस कर दिया जब तक कि मैं इसे अपने सेंसर को फिर से लिखने के लिए नहीं मिलता। मुझे वास्तव में यह जानने की जरूरत है कि एसडीके/एनडीके द्वारा इसे कैसे ट्रिगर किया जाए ... – xenonite

    +1

    एक ऐसा मंच है जहां उन्होंने सेंसर को एक नई सेटिंग्स फ़ाइल लिखने के लिए मजबूर करने के लिए कुछ खोल निर्देशों का उल्लेख किया है, लेकिन इसे su कमांड का उपयोग करने की आवश्यकता है, जिसका अर्थ है कि आप हो सकता है कि इसे सामान्य एंड्रॉइड संस्करण में उपयोग न करें ... इसके अलावा, आप जावा के माध्यम से एक खोल खोल सकते हैं, और उन आदेशों को टाइप कर सकते हैं, भले ही रीबूट प्रभावी होने के लिए आवश्यक हो, मान लीजिए कि यह वैसे भी काम करता है। आप यहां लिंक देख सकते हैं: http://forum.xda-developers.com/showpost.php?p=4081673&postcount=4885 –

    +0

    वह जीपीएस अंशांकन विधि केवल तभी काम करेगी जब आप उपयोगकर्ता को फोन को इंगित करने के निर्देश देते हैं गति, है ना? या क्या मैं कुछ न कुछ भूल रहा हूं? – MatrixFrog

    -3

    ये कुछ झुकाव संचालकों हैं यू

    स्थिरांक पूर्णांक ORIENTATION_UNKNOWN onOrientationChanged से वापस लौटा जब डिवाइस अभिविन्यास निर्धारित नहीं किया जा सकता है (आम तौर पर जब डिवाइस फ्लैट स्थिति के लिए एक पास में है) का उपयोग कर सकते हैं। सार्वजनिक कन्स्ट्रक्टर ओरिएंटेशनइवेंट लिस्टनर (संदर्भ संदर्भ) एक नया ओरिएंटेशनइवेंट लिस्टनर बनाता है। अभिविन्यासEventListener (संदर्भ संदर्भ, int दर) एक नया अभिविन्यास EventListener बनाता है। सार्वजनिक तरीके बूलियन canDetectOrientation() शून्य अक्षम() OrientationEventListener को अक्षम करता है। शून्य सक्षम() ओरिएंटेशनइवेंट लिस्टनर को सक्षम करता है ताकि यह सेंसर की निगरानी करेगा और डिवाइस अभिविन्यास बदलते समय ऑरेंटेशन चेंज (int) पर कॉल करेगा। अमूर्तता पर आधारित अमूर्तकरण (int ओरिएंटेशन) कॉल किया गया जब डिवाइस का अभिविन्यास बदल गया है। [विस्तृत करें] विरासत के तरीके कक्षा java.lang.Object ऑब्जेक्ट क्लोन() इस ऑब्जेक्ट की एक प्रति बनाता है और देता है। बूलियन बराबर (ऑब्जेक्ट ओ) निर्दिष्ट आवृत्ति के साथ इस उदाहरण की तुलना करता है और इंगित करता है कि वे बराबर हैं या नहीं। शून्य अंतिमकरण() ऑब्जेक्ट की स्मृति को वीएम द्वारा पुनः दावा किए जाने से पहले बुलाया जाता है। अंतिम कक्षा getClass() कक्षा का अनूठा उदाहरण देता है जो इस ऑब्जेक्ट की कक्षा का प्रतिनिधित्व करता है। int हैशकोड() इस ऑब्जेक्ट के लिए एक पूर्णांक हैश कोड देता है। अंतिम शून्य अधिसूचित() इस ऑब्जेक्ट के मॉनीटर पर प्रतीक्षा करने वाले थ्रेड का कारण बनता है (जागने के लिए प्रतीक्षा() विधियों को कॉल करने के माध्यम से)। अंतिम शून्य अधिसूचना सभी() इस ऑब्जेक्ट की मॉनिटर पर इंतजार कर रहे सभी थ्रेड का कारण बनता है (जागने के लिए प्रतीक्षा() विधियों को कॉल करने के माध्यम से)। स्ट्रिंग टूस्ट्रिंग() इस ऑब्जेक्ट का एक संक्षिप्त, मानव-पठनीय वर्णन वाला एक स्ट्रिंग देता है। अंतिम शून्य प्रतीक्षा (लंबी मिलिस, int nanos) कॉलिंग थ्रेड को तब तक इंतजार करने का कारण बनता है जब तक कोई अन्य थ्रेड इस ऑब्जेक्ट की अधिसूचना() या सूचित नहीं करता है (निर्दिष्ट समय समाप्ति तक)। अंतिम शून्य प्रतीक्षा (लंबी मिलिस) कॉलिंग थ्रेड को तब तक इंतजार करने का कारण बनता है जब तक कि कोई अन्य थ्रेड इस ऑब्जेक्ट की अधिसूचना() या सूचित नहीं करता है (निर्दिष्ट ऑब्जेक्ट समाप्त होने तक)। अंतिम शून्य प्रतीक्षा() कॉलिंग थ्रेड को तब तक प्रतीक्षा करने का कारण बनता है जब तक कोई अन्य थ्रेड इस ऑब्जेक्ट की अधिसूचना() या सूचित नहीं करता है। स्थिरांक सार्वजनिक स्थिर अंतिम पूर्णांक ORIENTATION_UNKNOWN के बाद से: एपीआई स्तर 3

    onOrientationChanged से वापस लौटा जब डिवाइस अभिविन्यास निर्धारित नहीं किया जा सकता है (आम तौर पर जब डिवाइस फ्लैट स्थिति के लिए एक पास में है)। भी देखें

    * onOrientationChanged(int) 
    

    लगातार मूल्य: -1 (0xffffffff) लोक कंस्ट्रक्टर्स सार्वजनिक OrientationEventListener (संदर्भ संदर्भ) के बाद से: एपीआई स्तर 3

    एक नया OrientationEventListener बनाता है। पैरामीटर अभिविन्यास EventListener के लिए संदर्भ। सार्वजनिक अभिविन्यास EventListener (संदर्भ संदर्भ, int दर) चूंकि: एपीआई स्तर 3

    एक नया अभिविन्यास EventListener बनाता है। पैरामीटर अभिविन्यास EventListener के लिए संदर्भ। जिस दर पर सेंसर ईवेंट संसाधित होते हैं (सेंसर मैनेजर भी देखें)। सरल स्क्रीन अभिविन्यास परिवर्तन पहचान के लिए SENSOR_DELAY_NORMAL के डिफ़ॉल्ट मान का उपयोग करें। लोक तरीके सार्वजनिक बूलियन canDetectOrientation() के बाद से: एपीआई स्तर 3

    सार्वजनिक शून्य अक्षम() के बाद से: एपीआई स्तर 3

    OrientationEventListener अक्षम करता है। सार्वजनिक शून्य सक्षम() के बाद से: एपीआई स्तर 3

    OrientationEventListener सक्षम बनाता है तो यह सेंसर की निगरानी और onOrientationChanged (int) जब डिवाइस अभिविन्यास परिवर्तन कॉल करेंगे। सार्वजनिक सारणी शून्य पर ऑरेंटेशन चेंज (इंट ओरिएंटेशन) चूंकि: एपीआई लेवल 3

    कॉल किया गया जब डिवाइस का अभिविन्यास बदल गया है। अभिविन्यास पैरामीटर 0 से 35 9 तक की डिग्री में है। अभिविन्यास 0 डिग्री है जब डिवाइस अपनी प्राकृतिक स्थिति में उन्मुख होता है, 9 0 डिग्री जब इसकी बाईं तरफ शीर्ष पर होता है, 180 डिग्री ऊपर उल्टा होता है, और 270 डिग्री होता है दाएं तरफ शीर्ष पर है। जब उपकरण फ्लैट के करीब होता है और अभिविन्यास निर्धारित नहीं किया जा सकता है तो ORIENTATION_UNKNOWN वापस कर दिया जाता है।

    +6

    http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks – MatrixFrog

    +0

    एपीआई के अनौपचारिक दस्तावेज की प्रतिलिपि बनाने और चिपकाने में मददगार नहीं है। एक उदाहरण अधिक सलाह दी जाएगी। – Spindizzy

    0

    मुझे लगता है कि आप हीरो के अंदर मैग्नेटोमीटर का जिक्र कर रहे हैं।

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

    कॉलिबेशन को छोड़कर, मुझे लगता है कि आपकी समस्या यह है कि सेंसर से प्राप्त रीडिंग गलत हैं। बेशक कॉलिब्रेशन सटीक रीडिंग के लिए एक शर्त है, लेकिन खेलने में अन्य कारक भी हैं।

    सटीकता बढ़ाने के लिए डेटा के साथ एक सेंसर से सेंसर डेटा को पूरक करने के लिए यह सामान्य प्रथा है। जब उपयोगकर्ता चल रहा है तो आप शीर्षक का निर्धारण करने के लिए जीपीएस का उपयोग कर सकते हैं। यदि वह धीरे-धीरे आगे बढ़ रहा है, तो यह भी गलत है। आप अभिविन्यास परिवर्तन (पूर्ण अभिविन्यास नहीं) के बारे में अनुमान लगाने के लिए एक्सेलेरोमीटर द्वारा रिपोर्ट किए गए डेटा को एकीकृत कर सकते हैं। लेकिन ईमानदारी से इस मामले में एक जीरोमीटर अधिक आदर्श होगा।

    सिस्टम जो इस तरह काम करते हैं उन्हें कभी-कभी Inertial Navigation Systems (आईएनएस) कहा जाता है क्योंकि वे अंतरिक्ष में एक निश्चित बिंदु दे सकते हैं, आगे के बाहरी डेटा के बिना उनकी बाद की सापेक्ष स्थिति और अभिविन्यास को सटीक रूप से निर्धारित कर सकते हैं। एक कलमैन फ़िल्टर का उपयोग करना समय-समय पर सिस्टम को याद करने के लिए सामान्य अभ्यास है जब एक पूर्ण स्थिति (जैसे जीपीएस के माध्यम से पुनर्प्राप्त) उपलब्ध है।

    हालांकि एक पूर्ण आईएनएस लागू करने के लिए यह अवास्तविक है, लेकिन आप निश्चित रूप से कुछ विचारों को आकर्षित कर सकते हैं कि वे आपके अभिविन्यास रीडिंग को और सटीक बनाने के लिए कैसे काम करते हैं।

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

    • कोई संबंधित समस्या नहीं^_^