2012-03-12 17 views
5

और इसलिए मैं पता करने के लिए जब एंड्रॉयड आधारित फोन एक झुकाव के आधार पर कार्यक्रम के लिए एक्स, वाई, जेड दिशाओं घुमाया गया की जरूरत है और फिर मैं अच्छी तरह से परिचालित कोड उन्मुखीकरण खोजने के लिए चुंबकत्व और त्वरण का उपयोग करता है के लिए इस्तेमाल किया के बाद से उन्मुखीकरण डिटेक्टर अविश्वसनीय है और यह अच्छी तरह से और अच्छे एक्स में था, जेड विमानों लेकिन कहते हैं कि एक व्यक्ति तो एंड्रॉयड रजिस्टरों y-दिशा आंदोलन भी उपयोगकर्ता हालांकि एक चक्राकार चलती बस एक निश्चित परिदृश्य स्थिति में अपने फोन पकड़े पर था और की सुविधा देता है अपने फोन को वाई दिशा में नहीं ले गए और इसलिए कार्यक्रम विफल हो गया लेकिन केवल त्वरण का उपयोग करने से भी सटीक नहीं है और मैं सोच रहा हूं कि उपयोगकर्ता के सापेक्ष वाई-गति का पता लगाने की इस समस्या को कैसे हल किया जाए?एंड्रॉयड उन्मुखीकरण का पता लगाने रंग

public class MotionListener { 
     String service_name = Context.SENSOR_SERVICE; 
     SensorManager sensorManager; 
     Sensor sensor; 

     public MotionListener(Context context) { 
      sensorManager = (SensorManager) context.getSystemService(service_name); 
      SensorManager sm = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE); 
      Sensor aSensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
      Sensor mfSensor = sm.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); 
      sm.registerListener(myAccelerometerListener, aSensor, SensorManager.SENSOR_DELAY_GAME); 
      sm.registerListener(myMagneticFieldListener, mfSensor, SensorManager.SENSOR_DELAY_GAME); 
     } 

     float[] accelerometerValues; 
     float[] magneticFieldValues; 
     final SensorEventListener myAccelerometerListener = new SensorEventListener() { 
      public void onSensorChanged(SensorEvent sensorEvent) { 
       if (sensorEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER) 
        accelerometerValues = sensorEvent.values; 
       float[] values = new float[3]; 
       float[] R = new float[9]; 
       try { 
        SensorManager.getRotationMatrix(R, null, accelerometerValues, magneticFieldValues); 
        SensorManager.getOrientation(R, values); 
        values[0] = (float) ((float) values[0] * 180/Math.PI); 
        values[1] = (float) ((float) values[1] * 180/Math.PI); 
        values[2] = (float) ((float) values[2] * 180/Math.PI); 
        System.out.println((int)values[0] + " " + (int)values[1] + "  " + (int)values[2]); 
        setTiltCoordinates(values); 
       } catch (NullPointerException e) { 
       } 
      public void onAccuracyChanged(Sensor sensor, int accuracy) { 
      } 
     }; 
+3

संभव नहीं - जो एक पूरी तरह से अलग सवाल – KevinDTimm

+0

नहीं है - डिवाइस के लिए उपयोगकर्ता के उन्मुखीकरण खिला के बिना। ऐसा नहीं कर सकता [संदर्भ के फ्रेम्स] (http://en.wikipedia.org/wiki/Frame_of_reference), आदि। उपयोगकर्ता के रूप में, उन शर्तों के तहत ऐसे ऐप का उपयोग करने का प्रयास करना व्यर्थता में एक अभ्यास है, वैसे भी। – Cheezmeister

+0

+1 मैं उसी – Sameer

उत्तर

4

ठीक है, अगर आप एक्सेलेरोमीटर डेटा को देख रहे हैं, तो आपके पास एक्स, वाई और जेड दिशाओं में तीन मान हैं। इनमें से एक में सबसे बड़ी खींच होगी, और आप आमतौर पर इसका अर्थ यह ले सकते हैं कि दिशा 'नीचे' है।

आंदोलन के साथ समस्याएं हो सकती हैं, जैसे कि उपयोगकर्ता स्पॉट पर स्पिन करता है, जिससे फोन को त्वरण महसूस होता है जो गुरुत्वाकर्षण के कारण नहीं है, यदि यह काफी अच्छा है, तो यह देखना शुरू हो सकता है कि दिशा 'नीचे' है , कितनी बार, आपको त्वरण के एक जी के करीब बनाने के लिए पर्याप्त तेजी से कताई करना होगा, जो मुझे बहुत संदेह है कि बस बस करने में सक्षम होगी।

आप अगली बड़ी समस्या यह है कि एक्स, वाई और जेड डेटा मानों सिर्फ तीन सीधा अक्ष प्रत्येक हैंडसेट अलग ढंग से करने के लिए केंद्रित किया जा सकता है जो करने के लिए कर रहे हैं। एक फोन पर, 'वाई' (सामान्य रूप से ऊपर और नीचे अक्ष माना जाता है) स्क्रीन के माध्यम से, ज़ेडएक्स, विमान पर स्क्रीन के साथ हो सकता है। एक और फोन में स्क्रीन के कोण पर y हो सकता है।

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

+0

के लिए खोज रहा हूं, मुझे और स्पष्ट होना चाहिए था, ऐप टिल्टिंग के माध्यम से ऑब्जेक्ट को चारों ओर ले जाता है। आइए कहें कि उपयोगकर्ता हमेशा ऑब्जेक्ट को पश्चिम में ले जाना चाहता है, तो अगर त्वरण एकमात्र सेंसर था तो उन्हें फोन पंप करना होगा। यह काम नहीं करता है। –

+0

आप मतलब है कि आप जबकि यह फ्लैट आयोजित किया जाता है ... – thecoshman

+0

एक गेंद फोन पर चारों ओर झुकाव की तरह कुछ करना चाहता हूँ या आप एक धुरी के चारों ओर उन्मुखीकरण डेटा चाहते हो? –

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