मैं एक नक्शा एप्लिकेशन बना रही हूँ, स्थान तीर है कि आप का सामना करना पड़ जो रास्ता रहे हैं, ताकि तरह से पता चलता सहित:एंड्रॉइड फोन अभिविन्यास मानव अभिविन्यास से मेल खाता कैसे प्राप्त करें?
मैं SensorManager.getOrientation()
से सीधे उन्मुखीकरण मिलता है, पहले दिए गए मान का उपयोग कर: दिगंश। जब फोन आयोजित किया जाता है ताकि स्क्रीन क्षितिज से ऊपर इंगित हो, और चित्र में, तीर ठीक काम करता है। हालांकि:
- जब फोन आयोजित किया जाता है तो स्क्रीन क्षितिज से नीचे इंगित कर रही है, तीर उपयोगकर्ता की ओर से दिशा की दिशा से 180 डिग्री दूर है।
- जब फोन आयोजित किया जाता है तो स्क्रीन का सामना क्षितिज के साथ स्तर होता है, तीर का कोई संकेत नहीं होता है जिस तरह से यह इंगित करता है। अजीमुथ अर्थपूर्ण परिणाम वापस नहीं लौटाता है।
- जब फ़ोन बाएं या दाएं झुका हुआ होता है (या लैंडस्केप मोड में आयोजित होता है), तीर बाएं या दाएं को टिल्ट करता है।
ध्यान से निर्मित और वैज्ञानिक छवि नीचे दिखाती है कि मेरा क्या मतलब है (जहां नीला उपयोगकर्ता का सामना कर रहा है, लाल तीर दिशा है, स्क्रीन लगभग उपयोगकर्ता के चेहरे का सामना कर रही है, और Google मानचित्र बिल्कुल वही करता है जो मैं चाहता हूं):
(ध्यान दें कि, गूगल मैप्स के साथ, इसे सफलतापूर्वक सूची पर पिछले दो कार्यों ऐसा नहीं करता है, तो स्वत: घुमाने बंद है। लेकिन मैं भी इस स्तर पर अभी तक नहीं कर रहा हूँ। एक एक समय में बात।)
ऐसा प्रतीत होता है कि यह है बस वाई अक्ष पॉइंटिंग दिशा का उपयोग करके यहां दिखाया गया है: http://developer.android.com/reference/android/hardware/SensorEvent.html, जब मैं इसे ज़ेड अक्ष पॉइंटिंग दिशा के विपरीत, अधिकतर समय, और वाई जब फोन सपाट हो, तो इसका उपयोग करना चाहता हूं। हालांकि, getOrientation()
रिटर्न के मान दिए गए हैं, मुझे कुछ मुद्दों को ठीक करने के लिए जटिल मामलों को लिखना होगा, और फोन-फेस-क्षितिज उपयोग केस असफल है। मुझे यकीन है कि एक आसान तरीका है।
float[] rotationMatrix = new float[9];
if(SensorManager.getRotationMatrix(rotationMatrix, null, lastAcceleration, lastMagneticField)){
float[] orientMatrix = new float[3];
SensorManager.getOrientation(rotationMatrix, orientMatrix);
orientation = orientMat[0]*180/(float)Math.PI;
}
क्या मैं गलत कर रहा हूँ:
यहाँ मेरी कोड (कहाँ lastAcceleration और lastMagneticField दोनों आंतरिक सेंसर से आया है) है? क्या इसे करने का कोई आसान रास्ता है?
संपादित करें: बस स्पष्ट करने के लिए, मैं यह धारणा कर रहा हूं कि उपयोगकर्ता उनके सामने डिवाइस धारण कर रहा है, और स्क्रीन उनके प्रति ओर इशारा कर रही है। इसके अलावा, मैं स्पष्ट रूप से यह नहीं बता सकता कि उनमें से केवल एक ही घूमता है या नहीं। साथ ही, जब मैं आगे बढ़ रहा हूं, तो उपयोगकर्ता की गति का उपयोग कर रहा हूं, लेकिन यह तब होता है जब वे स्थिर होते हैं।
वैज्ञानिक छवि के लिए +1 –
आपकी समस्या हल हो गई है? आखिरी एक्सेलेरेशन, आखिरी मैग्नेटिकफाल्ड कैसे मिला? –
नहीं। कभी हल नहीं किया हो सकता है कि यह कभी भी सुलभ न हो, और ऐसा लगता है कि Google मानचित्र उतना स्मार्ट नहीं था जितना मैंने सोचा था। मैंने लंबे समय से इसे अपने कार्यों की सूची से त्याग दिया है, जो करने की ज़रूरत है, क्योंकि अब मैं एक ही कंपनी के लिए काम नहीं करता हूं, अकेले उसी परियोजना को छोड़ दें। एंड्रॉइड शायद इन दिनों पूरी तरह से अलग तरीके से काम करता है, वैसे भी। – AlbeyAmakiir