2011-05-03 17 views
6

अपडेट के साथ काम करने लगते हैं नहीं है:

मैं विशिष्ट समस्या मैं एक वर्ग शुरू करने से हो रही थी हल करने में सक्षम था -स्कोप स्थिर काउंटर और घटनाओं की कभी भी एक्स संख्या को अनदेखा कर रहा है। लेकिन मैं अभी भी जानना चाहता हूं कि मैं गलत क्या कर रहा हूं: श्रोताओं को चार दिए गए स्थिरांकों में से किसी एक का उपयोग करने के बजाय माइक्रोसेकंड में संकेत के साथ पंजीकरण करना।"कस्टम" सेंसर घटना दरों SensorManager.registerListener (SensorEventListener श्रोता, सेंसर सेंसर, पूर्णांक दर)


मेरे एप्लिकेशन में एक गतिविधि सेंसर आकर्षक है, उपकरण के ओरिएंटेशन प्राप्त रोल का निर्धारण, और यह उपयोग करने के लिए।

मैं अपने सेंसर रजिस्टर करने के लिए

SensorManager.registerListener(SensorEventListener listener, Sensor sensor, int rate)

उपयोग कर रहा हूँ। से Android Documentation for this method:

पैरामीटर

[...]

दर

दर सेंसर घटनाओं में दिया जाता है। यह केवल सिस्टम के लिए एक संकेत है। घटनाओं को निर्दिष्ट दर से तेज या धीमी गति से प्राप्त किया जा सकता है। आमतौर पर घटनाओं को तेजी से प्राप्त किया जाता है। मान SENSOR_DELAY_NORMAL, SENSOR_DELAY_UI, SENSOR_DELAY_GAME, या SENSOR_DELAY_FASTEST या माइक्रोसॉन्ड में ईवेंट के बीच वांछित विलंब होना चाहिए।

यदि मैं 4 पूर्वनिर्धारित स्थिरांकों में से एक का उपयोग करता हूं तो ऐप ठीक काम करता है; हालांकि ये स्थिरांक सभी दर संकेत प्रदान करते हैं जो मेरी आवश्यकताओं के लिए बहुत तेज़ हैं। मुझे एक यूडीपी पैकेट भेजना है जिसमें प्रत्येक घटना परिवर्तन के साथ कुछ जानकारी शामिल है, और प्राप्त करने वाला अंत किसी भी पूर्वनिर्धारित दरों का उपयोग करके संदेशों के साथ पूरी तरह से गंदे हो रहा है। 30000 की तरह एक पूर्णांक संख्या का उपयोग करना (चूंकि एपीआई माइक्रोसेकंड में मात्रा निर्दिष्ट करता है) ऐप को सभी को एक साथ सेंसर रिपोर्टिंग रिपोर्ट करना बंद कर देता है।

मुझे क्या याद आ रहा है जो मुझे अपने स्वयं के इवेंट रेट संकेतों का उपयोग करने से रोक रहा है?

+0

हाँ, मैं भी ऐसा करना चाहता हूं! एकमात्र समाधान मैं सोच सकता हूं कि पैकेट को मैन्युअल रूप से फ़िल्टर करना है। – David

+2

यह एक व्यर्थ लक्ष्य है (प्रत्यक्ष अनुभव के आधार पर), क्योंकि सेंसर ड्राइवर आपके संकेतों का पालन करने के लिए बाध्य नहीं हैं। वास्तव में, यह किसी भी/सभी पूर्व परिभाषित स्थिरांक के लिए एक ही दर पर घटनाएं भेज सकता है! जब आप अपना वांछित समय-डेल्टा हिट करते हैं तो आपकी सबसे अच्छी शर्त जमा और ट्रिगर होती है। –

उत्तर

0

मुझे यकीन है कि सेंसर श्रोता दर ने जो किया है वह किया है। आपके प्रश्न में आपने 30000 लिखा, जो 30 मिलीसेकंड है। डॉक्टर में, यह कहता है कि दर आमतौर पर संकेत से तेज है। तो आप 30ms से तेज कर रहे हैं। क्या यह संभव है कि आपके अन्य नेटवर्क से जुड़े दिनचर्या बहुत तेजी से चल रहे हैं? इससे कुछ अवरोध हो सकते हैं जो आपको विश्वास दिलाता है कि सेंसर रिपोर्टिंग रोक दी गई है।

मेरे आवेदन में मुझे भी दी गई सामान्य दर बहुत अधिक मिलती है। इसलिए मैंने 250000 की दर निर्धारित की। मैंने 5 तक संख्या को सुगम बनाने के लिए औसत गणना को भी उपयोग किया। मुझे आईफोन कंपास के नतीजे के परिणामस्वरूप व्यवहार मिलता है।

फिर भी, मैं सुझाव नहीं दूंगा कि आप एक सेंसर श्रोता में नेटवर्क रिपोर्टिंग करते हैं। ऐसा नहीं किया जाना चाहिए। हालांकि, आप श्रोता में कुछ सरल गणना कर सकते हैं और मूल्य रिकॉर्ड कर सकते हैं। फिर, अन्य चीजों के साथ नेटवर्क भेजने के लिए, उच्च संख्या के साथ Handler.postDelayed जैसे टाइमर का उपयोग करें।

+0

यह बहुत लंबा रहा है क्योंकि मैंने उस परियोजना को देखा है (यह उस नौकरी के लिए था जिसे मैंने मई के अंत में छोड़ा था), लेकिन मुझे याद है कि उस समय मैंने विभिन्न मूल्यों का एक टन करने की कोशिश की थी, जिसमें मूल्यों सहित ~ 600ms का क्षेत्रफल, और अभी भी कोई परिणाम नहीं था। इसके अलावा, मैं डेटाग्राम में जानकारी पैक करने और इसे भेजने से पहले डिवाइस की ओर से ईवेंट की जांच कर रहा था, इसलिए नेटवर्क को इसके साथ कुछ भी नहीं करना चाहिए था। नेटवर्क रिपोर्टिंग श्रोता में भी नहीं की गई थी। डेटा पैक किया गया था और नेटवर्किंग को संभालने के AsyncTask को भेज दिया गया था। –

+0

@DougStephen क्या कोई कारण है कि आप मुझे कम कर रहे हैं? मेरे उत्तर का कौन सा हिस्सा गलत है? –

+1

मैंने आपको वोट नहीं दिया था। शायद किसी और ने किया था। –

0

इस प्रश्न को 2011 में पूछा गया था, फिर भी इसका उत्तर देने के बाद से बहुत कुछ बदल गया है; एपीआई 1 9 (2013+) से, पंजीकरण एपीआई का एक नया संस्करण है, जिसमें आप सेंसर रीडिंग प्राप्त करने के अंतराल पर उल्लेख कर सकते हैं। डॉक्स से:

बूलियन registerListener (SensorEventListener श्रोता, सेंसर सेंसर, पूर्णांक samplingPeriodUs, पूर्णांक maxReportLatencyUs) दिया नमूना आवृत्ति पर दिए गए सेंसर और दिए गए अधिकतम रिपोर्टिंग विलंबता के लिए एक SensorEventListener पंजीकृत करता है।

इस समारोह registerListener (SensorEventListener, सेंसर, पूर्णांक) के समान है, लेकिन यह घटनाओं वितरित किए जाने से पहले हार्डवेयर फीफो (कतार) में अस्थायी रूप से रहने के लिए अनुमति देता है। घटनाओं को हार्डवेयर फीफो में अधिकतम रिपोर्टपोर्ट तक माइक्रोसॉंड में संग्रहीत किया जा सकता है। फीफो में घटनाओं में से एक बार रिपोर्ट होने की आवश्यकता है, फीफो की सभी घटनाओं को अनुक्रमिक रूप से रिपोर्ट किया गया है। इसका अर्थ यह है कि अधिकतम रिपोर्टिंग विलंबता समाप्त हो जाने से पहले कुछ घटनाएं रिपोर्ट की जाएंगी।

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