मास्टर Android चे सेन्सर: हार्डवेअर, सॉफ्टवेअर आणि बहुआयामी

लेखक: John Stephens
निर्मितीची तारीख: 26 जानेवारी 2021
अद्यतन तारीख: 5 जुलै 2024
Anonim
मास्टर Android चे सेन्सर: हार्डवेअर, सॉफ्टवेअर आणि बहुआयामी - अनुप्रयोग
मास्टर Android चे सेन्सर: हार्डवेअर, सॉफ्टवेअर आणि बहुआयामी - अनुप्रयोग

सामग्री


आज बर्‍याच आधुनिक Android डिव्हाइसवर सेन्सरचा गुच्छा आहे.

आपण ही माहिती बर्‍याच प्रकारे भिन्न प्रकारे वापरू शकता - जरी तो प्रकाश पातळीचे निरीक्षण करीत असेल तर आपला अनुप्रयोग आपोआप त्याची चमक किंवा रंगसंगती समायोजित करू शकेल; वापरकर्त्यास त्यांचे डिव्हाइस टिल्टिंगसारखे जेश्चर वापरून आपल्या मोबाइल गेमसह संवाद साधण्याची परवानगी; किंवा जेव्हा वापरकर्त्याने त्यांचे डिव्हाइस त्यांच्या कानावर धरुन ठेवले तेव्हा स्पर्श इव्हेंट स्वयंचलितपणे अक्षम करण्यासाठी निकटता सेन्सर वापरणे.

या लेखात, आम्ही हार्डवेअर आणि सॉफ्टवेअर सेन्सरच्या श्रेणीमधील प्रकाश, शेजारी आणि गती डेटा पुनर्प्राप्त करणारे तीन अनुप्रयोग तयार करु. आम्ही रिअल टाइममध्ये या Android सेन्सर्सचे देखील निरीक्षण करू, जेणेकरून आपल्या अनुप्रयोगास नेहमीच नवीनतम माहितीमध्ये प्रवेश असेल.

या लेखाच्या शेवटी, अँड्रॉइड सेन्सरमधून डेटाचा एक तुकडा कसा काढायचा आणि बहु-आयामी अ‍ॅरेच्या स्वरूपात त्यांचा डेटा प्रदान करणारे सेन्सर्स कसे हाताळावेत हे आपल्याला माहिती असेल.

मी कोणते Android सेन्सर वापरू शकतो?

Android सेन्सर खालील श्रेणींमध्ये विभागले जाऊ शकतात:


  • पर्यावरण सेन्सर हे वातावरणीय परिस्थिती, जसे की हवेचे तापमान, दबाव, आर्द्रता आणि वातावरणीय प्रकाश पातळी मोजतात.

  • सेन्सर स्थान या श्रेणीमध्ये सेन्सर समाविष्ट आहेत जे डिव्हाइसच्या शारीरिक स्थितीचे मापन करतात, जसे की निकटता सेन्सर आणि भौगोलिक क्षेत्र सेन्सर.
    मोशन सेन्सर हे सेन्सर डिव्हाइस गती मोजतात आणि त्यात अ‍ॅक्लेरोमीटर, गुरुत्व सेन्सर, जायरोस्कोप आणि रोटेशन वेक्टर सेन्सर समाविष्ट असतात.

याव्यतिरिक्त, सेन्सर एकतर असू शकतात:

  • हार्डवेअर आधारित. हे भौतिक घटक आहेत जे डिव्हाइसमध्ये तयार केलेले आहेत आणि विशिष्ट गुणधर्मांचे थेट मोजमाप करतात, जसे की प्रवेग किंवा आसपासच्या भौगोलिक क्षेत्रांची शक्ती.
  • सॉफ्टवेअर आधारित, कधीकधी आभासी सेन्सर किंवा संमिश्र सेन्सर म्हणून ओळखले जाते. हे सामान्यत: एकाधिक हार्डवेअर-आधारित सेन्सरवरील डेटा एकत्र करतात. या लेखाच्या शेवटी, आम्ही रोटेशन वेक्टर सेन्सरसह कार्य करीत आहोत, जो सॉफ्टवेअर सेन्सर आहे जो डिव्हाइसच्या एक्सेलरमीटर, मॅग्नेटोमीटर आणि जायरोस्कोपमधील डेटा एकत्र करतो.

वातावरणीय सेन्सर: परिवेश प्रकाश मोजणे

Android चे लाइट सेन्सर “लक्स” युनिट्समध्ये सभोवतालच्या प्रकाशाचे मापन करते, जे मानवी डोळ्याद्वारे समजल्या जाणार्‍या प्रकाशाची तीव्रता असते. सेन्सरद्वारे नोंदविलेले लक्स मूल्य डिव्हाइसवर भिन्न असू शकते, म्हणून जर आपल्या अनुप्रयोगास सुसंगत मूल्ये आवश्यक असतील तर आपल्याला अनुप्रयोगात वापरण्यापूर्वी आपल्याला कच्चा डेटा हाताळण्याची आवश्यकता असू शकते.


या विभागात, आम्ही एखादा अनुप्रयोग तयार करणार आहोत जो डिव्हाइसच्या लाईट सेन्सरमधून वर्तमान लक्स मूल्य पुनर्प्राप्त करेल, ते एका टेक्स्टव्यूमध्ये प्रदर्शित करेल आणि नवीन डेटा उपलब्ध होताच टेक्स्टव्यू अद्यतनित करेल.त्यानंतर आपण ही माहिती अॅप्सच्या श्रेणीमध्ये वापरू शकता, उदाहरणार्थ आपण टॉर्च अ‍ॅप्लिकेशन तयार करू शकता जो प्रकाश सेन्सरमधून माहिती खेचून घेईल आणि नंतर विद्यमान प्रकाश पातळीच्या आधारावर त्या बीमची सामर्थ्य आपोआप समायोजित करेल.

आपल्या आवडीच्या सेटिंग्जसह एक नवीन Android प्रकल्प तयार करा आणि चला प्रारंभ करूया!

आपला सेन्सर डेटा प्रदर्शित करीत आहे

मी एक टेक्स्ट व्ह्यू जोडणार आहे जे अंततः आम्ही प्रकाश सेन्सरमधून काढलेला डेटा प्रदर्शित करतो. जेव्हा जेव्हा नवीन डेटा उपलब्ध होईल तेव्हा हे मजकूरव्यू अद्यतनित होईल, जेणेकरून वापरकर्त्यास नेहमीच नवीनतम माहितीमध्ये प्रवेश असेल.

आपल्या प्रोजेक्टची પ્રવૃત્તિ_मेन.एक्सएमएल फाइल उघडा आणि खालील जोडा:

पुढे, आम्हाला आपल्या लेआउटमध्ये संदर्भित असलेले “लाईट_सेन्सर” स्ट्रिंग स्त्रोत तयार करण्याची आवश्यकता आहे. आपल्या प्रोजेक्टची तार.एक्सएमएल फाइल उघडा आणि खालील जोडा:

प्रकाश सेन्सर:% 1 $ .2f

“% 1 $ .2f” एक प्लेसहोल्डर आहे जो आम्हाला प्रदर्शित करू इच्छित माहिती आणि त्याचे स्वरूपन कसे करावे हे निर्दिष्ट करते:

  • %1. आपण समान स्ट्रिंग संसाधनात एकाधिक प्लेसहोल्डर घालू शकता; “% 1” असे सूचित करते की आम्ही एकच प्लेसहोल्डर वापरत आहोत.
  • $.2. आमच्या अनुप्रयोगाने येणार्‍या प्रत्येक फ्लोटिंग-पॉईंट मूल्याचे स्वरूपन कसे करावे हे निर्दिष्ट करते. “$ .2” असे सूचित करते की मूल्य दोन दशांश ठिकाणी गोल केले पाहिजे.
  • एफ फ्लोटिंग-पॉईंट नंबर म्हणून मूल्य स्वरूपित करा.

काही सेन्सर इतरांपेक्षा सामान्य नसले तरी आपण असे समजू नका की प्रत्येक डिव्हाइसला तंतोतंत समान हार्डवेअर आणि सॉफ्टवेअरमध्ये प्रवेश आहे. सेन्सरची उपलब्धता Android च्या भिन्न आवृत्त्यांमध्ये देखील भिन्न असू शकते, कारण Android प्लॅटफॉर्मच्या नंतरच्या रिलीझ होईपर्यंत काही सेन्सर्सची ओळख नव्हती.

Android सेन्सर फ्रेमवर्क वापरुन डिव्हाइसवर विशिष्ट सेन्सर उपस्थित आहे की नाही ते आपण तपासू शकता. त्यानंतर आपण सेन्सर उपलब्धतेवर आधारित आपल्या अनुप्रयोगाचे काही भाग अक्षम किंवा सक्षम करू शकता किंवा आपण आपल्या अनुप्रयोगातील काही वैशिष्ट्ये अपेक्षेनुसार कार्य करणार नाहीत असे स्पष्टीकरण प्रदर्शित करू शकता.

आमच्याकडे आमच्या तारांची.एक्सएमएल फाइल उघडलेली असताना, चला “नाही_सेन्सर” स्ट्रिंग तयार करू, जी लाईट सेन्सर अनुपलब्ध असल्यास आम्ही प्रदर्शित करू:

लाइट सेन्सर उपलब्ध नाही

जर आपला अनुप्रयोग एखाद्या विशिष्ट सेन्सरमध्ये प्रवेश केल्याशिवाय चांगला वापरकर्ता अनुभव प्रदान करू शकत नसेल तर आपल्याला आपल्या मॅनिफेस्टमध्ये ही माहिती जोडण्याची आवश्यकता आहे. उदाहरणार्थ, आपल्या अ‍ॅपला होकायंत्र सेन्सरमध्ये प्रवेश आवश्यक असल्यास आपण खालील वापरू शकता:

आता, आपला अ‍ॅप केवळ कंपास सेंसर असलेल्या डिव्हाइसवर डाउनलोड केला जाऊ शकतो.

हे कदाचित आपल्या प्रेक्षकांना मर्यादित ठेवू शकेल, परंतु एखाद्यास ते असल्यावर आपला अनुप्रयोग डाउनलोड करण्याची परवानगी देण्यापेक्षा हे कमी नुकसानकारक आहे हमी त्यांच्या डिव्हाइसच्या सेन्सर कॉन्फिगरेशनमुळे, एखादा वाईट अनुभव घ्यावा.

सेन्सरद्वारे संप्रेषण करीत आहे: सेन्सरमेनेजर, सेन्सरएव्हेंट्स आणि श्रोते

डिव्हाइसच्या लाईट सेन्सरसह संवाद साधण्यासाठी, आपल्याला खालील चरण पूर्ण करणे आवश्यक आहे:

1. सेन्सरमॅनेजरचे उदाहरण मिळवा

सेन्सॉर मॅनेजर आपल्याला डिव्हाइसच्या संपूर्ण सेन्सर्समध्ये प्रवेश करण्यासाठी आवश्यक असलेल्या सर्व पद्धती प्रदान करते.

प्रारंभ करण्यासाठी, एक व्हेरिएबल तयार करा ज्यामध्ये सेंसरमॅनेजरची उदाहरणे असतील:

खासगी सेन्सर मॅनेजर लाइट सेन्सर मॅनेजर;

त्यानंतर, आपल्याला कॉन्टेक्स्ट.गेटसिस्टम सर्व्हिस पद्धतवर कॉल करून आणि संदर्भ मध्ये पास करून सेन्सॉर मॅनेजरचे उदाहरण प्राप्त करणे आवश्यक आहे.

लाइटसेन्सरमॅनेजर = (सेन्सरमॅनेजर) गेटसिस्टमसेवा (संदर्भ. SENSOR_SERVICE);

2. लाईटटेक्स्ट व्ह्यूचा संदर्भ मिळवा

पुढे, आम्हाला एक खासगी मेंबर व्हेरिएबल तयार करण्याची आवश्यकता आहे जी आमच्या टेक्स्टव्यू ऑब्जेक्ट्स ठेवेल आणि आमच्या टेक्स्ट व्ह्यूला ती नियुक्त करेलः

खासगी टेक्स्टव्यूव लाइटटेक्स्ट व्ह्यू; ... ... ... लाईटटेक्स्टव्यू = (टेक्स्ट व्ह्यू) फाइन्ड व्ह्यूबायआयडी (आर. लाईटलाइट टेकव्यूव्ह);

3. सद्य डिव्हाइसवर सेन्सर विद्यमान आहे की नाही ते तपासा

आपण गेटडिफॉल्ट सेन्सर () पद्धतीवर कॉल करून एखाद्या विशिष्ट सेन्सरमध्ये प्रवेश मिळवू शकता आणि नंतर त्यास प्रश्नांमध्ये सेन्सर देऊन पास करू शकता. लाईट सेन्सरसाठी प्रकार स्थिर आहे TYPE_LIGHT, म्हणून आम्हाला पुढील गोष्टी वापरण्याची आवश्यकता आहे:

लाइटसेन्सर = लाइट सेन्सरमॅनेज.जेटडिफॉल्ट सेन्सर (सेन्सर. टीवायपी ००)

या डिव्हाइसवर सेन्सर अस्तित्वात नसल्यास, नंतर getDefaultSensor () पद्धत निरर्थक होईल आणि आम्ही “No_sensor” स्ट्रिंग प्रदर्शित करू:

स्ट्रिंग सेन्सर_इरर = getRes स्रोत (). गेटस्ट्रिंग (आर. स्ट्रिंग.नो_सेन्सर); if (लाइटसेन्सर == शून्य) {लाइटटेक्स्टव्यू.सेटसेट (सेंसर_अररर); }}

Your. आपल्या सेन्सर श्रोत्यांची नोंदणी करा

प्रत्येक वेळी सेन्सरमध्ये नवीन डेटा असतो, तेव्हा अँड्रॉइड सेन्सरव्हेंट ऑब्जेक्ट व्युत्पन्न करतो. या सेन्सरव्हेंट ऑब्जेक्टमध्ये इव्हेंट, टाइमस्टॅम्प आणि नवीन डेटा व्हॅल्यूज तयार करणार्‍या सेन्सरचा समावेश आहे.

सुरुवातीस, आम्ही प्रकाश आणि निकटता सेन्सर्सवर लक्ष केंद्रित करीत आहोत, जे डेटाचा एक तुकडा परत करतात. तथापि, काही सेन्सर प्रत्येक सेन्सरएव्हेंटसाठी रोटेशन वेक्टर सेन्सरसह, बहुआयामी अ‍ॅरे प्रदान करतात, ज्याचा आम्ही या लेखाच्या शेवटी शोध घेत आहोत.

या सेन्सॉरव्हेंट ऑब्जेक्टबद्दल आमच्या अनुप्रयोगास सूचित केले जाईल हे सुनिश्चित करण्यासाठी आम्हाला सेन्सॉर मॅनेजरचे रजिस्टरलिस्टनर () वापरुन त्या विशिष्ट सेन्सर इव्हेंटसाठी श्रोत्याची नोंदणी करणे आवश्यक आहे.

रजिस्टरलिस्टनर () पद्धत खालील युक्तिवाद घेते:

  • अ‍ॅप किंवा क्रियाकलाप संदर्भ
  • आपण निरीक्षण करू इच्छित सेंसरचा प्रकार.
  • सेन्सरने नवीन डेटा पाठवावा तो दर. उच्च दर आपला अनुप्रयोग अधिक डेटा प्रदान करेल, परंतु हे अधिक सिस्टम संसाधने, विशेषत: बॅटरीचे आयुष्य देखील वापरेल. डिव्हाइसची बॅटरी जतन करण्यात मदत करण्यासाठी, आपण आपल्या अनुप्रयोगास आवश्यक असलेल्या डेटाच्या किमान प्रमाणात विनंती करावी. मी सेन्सरमॅनेज. सेन्सर_डिले_नॉर्मल वापरणार आहे, जे दर २००,००० मायक्रोसेकंद (०.२ सेकंद) मध्ये एकदा नवीन डेटा पाठवते.

सेन्सर ऐकण्यामुळे डिव्हाइसची बॅटरी निचरा होत असल्याने आपण कधीही आपल्या ’sप्लिकेशनच्या ऑनक्रिएट () पद्धतीमध्ये श्रोत्यांची नोंदणी करू नये कारण यामुळे सेन्सर्स डेटा पाठविणे सुरू ठेवेल, आपला अनुप्रयोग पार्श्वभूमीवर असला तरीही.

त्याऐवजी, आपण अनुप्रयोगाच्या ऑनस्टार्ट () लाइफसायकल पद्धतीत आपले सेन्सर्स नोंदवावे:

@ ओव्हरराइड संरक्षित शून्य ऑनस्टार्ट (). सुपर.ऑनस्टार्ट (); // जर वर्तमान डिव्हाइसवर सेन्सर उपलब्ध असेल तर ... // असल्यास (लाइट सेंसर! = शून्य) {// .......... नंतर ऐकणे सुरू करा // लाइट सेन्सरमॅनेजर. रेजिस्टरलिस्टर (हा, लाइट सेन्सर, सेन्सरमॅनेजर. सेन्सर_डिले_नॉर्मल); }}

5. सेन्सरएव्हेंटलिस्टनर कॉलबॅकची अंमलबजावणी करा

सेन्सरएव्हेंटलिस्टनर एक इंटरफेस आहे जो सेन्सरमेनेजरकडून सूचना प्राप्त करतो
जेव्हा नवीन डेटा उपलब्ध असतो किंवा सेन्सरची अचूकता बदलते.

पहिली पायरी, सेन्सरएव्हेंटलिस्टनर इंटरफेसची अंमलबजावणी करण्यासाठी आमच्या वर्ग स्वाक्षर्‍यामध्ये बदल करीत आहे:

पब्लिक क्लास मेनएक्टिव्हिटीने अ‍ॅपकॉम्पॅट अ‍ॅक्टिव्हिटीची सेन्सॉर इव्हेंटलिस्टनर लागू केली {

त्यानंतर आम्हाला खालील कॉलबॅक पद्धती लागू करण्याची आवश्यकता आहे:

ऑन सेन्सर चेंज्ड ()

प्रत्येक नवीन सेन्सरएव्हेंटला प्रतिसाद म्हणून ही पद्धत म्हटले जाते.

सेन्सर डेटा बर्‍याचदा वेगाने बदलू शकतो, म्हणून आपला अनुप्रयोग नियमितपणे ऑन सेंसरचेंज () पद्धतीवर कॉल करीत आहे. आपला अनुप्रयोग सुरळीत चालू ठेवण्यासाठी, आपण ऑन सेन्सॉर चेंजेड () पद्धतीमध्ये शक्य तितके कमी कार्य केले पाहिजे.

@ ओव्हरराइड सार्वजनिक शून्य ऑन सेंसरचेंज (सेन्सरएव्हेंट सेन्सरएव्हेंट) do // करण्यासाठी // To

onAccuracyChanged ()

सेन्सरची अचूकता सुधारल्यास किंवा नकारल्यास, Android ऑनअॅक्युरासीचेंज () पद्धतीवर कॉल करेल आणि त्यास सेन्सरपॅटस_यूएनआरएलआयएबल किंवा सेन्सरपॅटस_एसीसीआरएसीआयएचईटी सारख्या नवीन अचूकतेचे मूल्य असलेले सेन्सर ऑब्जेक्ट देईल.

प्रकाश सेन्सर अचूकतेतील बदलांचा अहवाल देत नाही, म्हणून मी ऑनअॅक्युरासी चेंज्ड () कॉलबॅक रिक्त सोडत आहे:

@ ओव्हरराइड सार्वजनिक शून्य onAccuracyChanged (सेन्सर सेन्सर, इंट i) {// करण्यासाठी //} To

6. सेन्सर मूल्य पुनर्प्राप्त करा

आमच्याकडे जेव्हा नवीन मूल्य असते तेव्हा आम्हाला ऑन सेन्सॉर चेंज्ड () मेथड कॉल करणे आवश्यक आहे आणि “लाईट_सेन्सर” स्ट्रिंग पुनर्प्राप्त करणे आवश्यक आहे. त्यानंतर आम्ही स्ट्रिंगचा प्लेसहोल्डर मजकूर (% 1 $ .2f) अधिलिखित करू शकतो आणि आमच्या टेक्स्ट व्ह्यूचा भाग म्हणून अद्यतनित केलेली स्ट्रिंग प्रदर्शित करू शकतो:

@ ओव्हरराइड पब्लिक शून्य ऑनसेन्सरचेंज (सेन्सरएव्हेंट सेन्सरएव्हेंट) {// सेन्सरचे सध्याचे मूल्य // फ्लोट करंटव्हॅल्यू = सेन्सरइव्हेंट.व्हॅल्यूज; // “लाईट_सेन्सर” स्ट्रिंग पुनर्प्राप्त करा, नवीन व्हॅल्यू घाला आणि ती वापरकर्त्याला प्रदर्शित करा. // लाईटटेक्स्टव्यू.सेटसेट (गेटआरसोर्स (). गेटस्ट्रिंग (आर. स्ट्रिंग.लाइट_सेन्सर, करंटवॅल्यू)); }

7. आपल्या श्रोत्यांची नोंदणी रद्द करा

सेन्सर्स थोड्या वेळात मोठ्या प्रमाणात डेटा व्युत्पन्न करू शकतात, जेणेकरून डिव्‍हाइसची संसाधने जतन करण्‍यात आपल्‍याला आपल्या श्रोतांची आवश्यकता नसते तेव्हा त्यांची नोंदणी करणे आवश्यक आहे.

आपला अनुप्रयोग पार्श्वभूमीवर असतो तेव्हा सेन्सर इव्हेंट ऐकणे थांबवण्यासाठी आपल्या प्रोजेक्टच्या ऑनस्टॉप () लाइफसायकल पद्धतीत नोंदणी रद्द करालिकर () नोंदणी जोडा:

@ ओव्हरराइड संरक्षित शून्य ऑनस्टॉप (). सुपर.ऑनस्टॉप (); लाइटसेन्सरमॅनेज.अनग्रीस्टरलिस्टनर (हे); }

लक्षात ठेवा की आपण Android 7.0 प्रमाणेच आपल्या श्रोतांची ऑन पॉज () नोंदणी रद्द करू नये आणि उच्च अनुप्रयोग स्प्लिट-स्क्रीन आणि पिक्चर-इन-पिक्चर मोडमध्ये चालू शकतात, जेथे ते विरामित अवस्थेत आहेत, परंतु ऑनस्क्रीन दृश्यमान राहतील.

Android चे लाइट सेन्सर वापरणे: पूर्ण केलेला कोड

वरील सर्व चरणे पूर्ण केल्यानंतर, आपल्या प्रोजेक्टची मुख्य क्रियाकलाप यासारखे दिसले पाहिजे:

android.support.v7.app.appCompatActivity आयात करा; android.os.Bundle आयात करा; android.content.Context आयात करा; android.hardware.Sensor आयात करा; android.hardware.SensorEvent आयात करा; android.hardware.SensorEventListener आयात करा; android.hardware.SensorManager आयात करा; android.widget.TextView आयात करा; पब्लिक क्लास मेनएक्टिव्हिटीने अ‍ॅपकॉम्पॅटएक्टिव्हिटी वाढविली आहे // सेन्सरएव्हेंटलिस्टनर इंटरफेसची अंमलबजावणी करा // सेन्सरएव्हेंटलिस्टनर लागू करा {// आपले व्हेरिएबल्स तयार करा // खासगी सेन्सर लाइट सेंसर; खासगी सेन्सर मॅनेजर लाइट सेन्सर मॅनेजर; खासगी टेक्स्टव्यूव लाइटटेक्स्ट व्ह्यू; @ ओव्हरराइड संरक्षित शून्य ऑनक्रिएट (बंडल सेव्हिडइन्स्टेन्सस्टेट). सुपर.ऑनक्रिएट (सेव्हिडइन्स्टेन्सस्टेट); सेट कॉन्टेन्ट व्ह्यू (आर.लेआउट.एक्टिव्हिटी_मेन); लाइटटेक्स्ट व्ह्यू = (टेक्स्ट व्ह्यू) शोध व्ह्यूबायआयडी (आर. आयडलाइटलाइटटेक्स्ट व्ह्यू); // सेन्सरमॅनेजर // लाइटसेन्सरमॅनेजर = (सेन्सरमॅनेजर) गेटसिस्टम सर्व्हिस (संदर्भ. सेन्सर_सर्वाइसे) प्राप्त करा; // लाईट सेन्सरसाठी तपासणी करा // लाइट सेंसर = लाइट सेन्सरमॅनेजर.जेटडेफॉल्ट सेन्सर (सेन्सर. टीवायपी. // जर लाइट सेन्सर अस्तित्वात नसेल तर एखादी त्रुटी दाखवा // स्ट्रिंग सेन्सर_इरर = getRes स्रोत (). गेटस्ट्रिंग (आर. स्ट्रिंग.नो_सेन्सर); if (लाइटसेन्सर == शून्य) {लाइटटेक्स्टव्यू.सेटसेट (सेंसर_अररर); St} @ ओव्हरराइड संरक्षित शून्य ऑनस्टार्ट (). सुपर.ऑनस्टार्ट (); // जर वर्तमान डिव्हाइसवर सेन्सर उपलब्ध असेल तर .... // असल्यास (लाइट सेंसर! = शून्य) {// .......... नंतर श्रोत्याची नोंदणी करा // लाइट सेन्सरमॅनेज. रेजिस्टरलिस्टनर (हे, लाइट सेन्सर, // आपण कितीवेळा इच्छुक आहात ते निर्दिष्ट करा) नवीन डेटा प्राप्त करा // सेन्सरमॅनेजर. सेन्सर_डेले_एनओआरएमएल); Top} @ ओव्हरराइड संरक्षित शून्य ऑनस्टॉप (). सुपर.ऑनस्टॉप (); // आपल्या श्रोत्याची नोंदणी रद्द करा // लाईट सेन्सरमॅनेज.अनुरेस्टरलिस्टनर (हे); Ens @ सेन्सॉर चेंज्ड (सेन्सरएव्हेंट सेन्सरएव्हंट) ओव्हरराइड पब्लिक रिकामा {// सेन्सरचे सध्याचे मूल्य // फ्लोट करंटव्हॅल्यू = सेन्सरव्हेंट.व्हॅल्यूज; // “लाईट_सेन्सर” स्ट्रिंग पुनर्प्राप्त करा, नवीन व्हॅल्यू घाला आणि टेक्स्ट व्ह्यू // लाइटटेक्स्टव्यू.सेटसेट (गेटआरसोर्सस (). गेटस्ट्रिंग (आर. स्ट्रिंग.लाइट_सेन्सर, करंटवॅल्यू)) अद्यतनित करा; O @ ओव्हरराइड // जर सेन्सरची अचूकता बदलली तर .... .// सार्वजनिक शून्य ऑनएक्युरासीचेंज केलेले (सेन्सर सेन्सर, इंट i) {// टू डो //} TO

आपल्या पूर्ण झालेल्या Android सेन्सर अ‍ॅपची चाचणी घ्या

या अॅप्लिकेशनचा भौतिक Android स्मार्टफोन किंवा टॅब्लेटवर परीक्षण करण्यासाठी:

  • आपल्या डिव्हाइसवर प्रकल्प स्थापित करा (Android स्टुडिओ टूलबार वरून “चालवा> चालवा” निवडून).
  • जरी ते उपकरणांमध्ये बदलत असले तरी, प्रकाश सेन्सर बर्‍याचदा स्क्रीनच्या वरील-उजव्या बाजूस असतो. प्रकाश पातळी हाताळण्यासाठी, आपले डिव्हाइस जवळ हलवा आणि नंतर प्रकाशाच्या स्रोतापासून आणखी दूर. वैकल्पिकरित्या, आपण आपला हात आपल्या डिव्हाइसवर लपवून ठेवण्याचा प्रयत्न करू शकता. उपलब्ध असलेल्या प्रकाशाच्या प्रमाणावर अवलंबून “लाइट सेन्सर” मूल्य वाढले आणि कमी झाले पाहिजे.

आपण एखादे Android आभासी डिव्हाइस (एव्हीडी) वापरत असल्यास, नंतर इम्युलेटरमध्ये व्हर्च्युअल सेन्सर नियंत्रणाचा एक संच आहे जो आपण विविध सेन्सर इव्हेंटचे नक्कल करण्यासाठी वापरू शकता. आपण या व्हर्च्युअल सेन्सर नियंत्रणे, एमुलेटरच्या "विस्तारित नियंत्रणे" विंडोद्वारे प्रवेश करता.

  • आपल्या एव्हीडीवर अनुप्रयोग स्थापित करा.
  • एव्हीडी बरोबरच, आपल्याला बटणाची एक पट्टी दिसेल. तीन बिंदू असलेले “अधिक” बटण शोधा (जेथे खालील स्क्रीनशॉटमध्ये कर्सर स्थित आहे) आणि त्यास एक क्लिक द्या. हे “विस्तारित नियंत्रणे” विंडो लाँच करते.

  • डावीकडील मेनूमध्ये, “व्हर्च्युअल सेन्सर” निवडा.
  • “अतिरिक्त सेन्सर” टॅब निवडा. या टॅबमध्ये विविध स्लाइडर आहेत ज्यांचा वापर आपण भिन्न स्थान आणि पर्यावरण संवेदक इव्हेंटचे नक्कल करण्यासाठी करू शकता.

  • नक्कल केलेल्या प्रकाश पातळी बदलण्यासाठी “लाइट (लक्स)” स्लाइडर शोधा आणि त्यास डावीकडे आणि उजवीकडे ड्रॅग करा. आपल्या अनुप्रयोगाने ही बदलणारी मूल्ये रिअल टाइममध्ये प्रदर्शित करावीत.

आपण पूर्ण प्रकल्प गिटहब वरून डाउनलोड करू शकता.

Android च्या निकटता सेन्सरसह अंतर मोजत आहे

पर्यावरणीय सेन्सरकडून माहिती कशी मिळवायची हे आपण पाहिले आहे, आपण हे ज्ञान आपण कसे लागू केले ते पाहू या स्थिती सेन्सर

या विभागात, आम्ही आपल्या स्मार्टफोन किंवा टॅब्लेट आणि अन्य ऑब्जेक्ट्समधील अंतर निरीक्षण करण्यासाठी डिव्हाइसच्या निकटता सेन्सरचा वापर करू. आपल्या अनुप्रयोगामध्ये कोणत्याही प्रकारची व्हॉईस कार्यक्षमता असल्यास, स्मार्टफोन वापरकर्त्याच्या कानात कधी ठेवला जातो हे निर्धारित करण्यात मदत करते, उदाहरणार्थ, जेव्हा ते टेलिफोन संभाषण करीत असतात तेव्हा. त्यानंतर आपण स्पर्श इव्हेंट अक्षम करण्यासाठी या माहितीचा वापर करू शकता, जेणेकरून वापरकर्ता चुकून लटकत नाही, किंवा इतर अवांछित घटनांना मध्य-संभाषणात ट्रिगर करत नाही.

वापरकर्ता इंटरफेस तयार करत आहे

मी ऑनस्क्रीन जवळील डेटा प्रदर्शित करणार आहे, जेणेकरून आपण रिअल टाइममध्ये ते अद्यतन पाहू शकता. गोष्टी सोप्या ठेवण्यास मदत करण्यासाठी, आमच्या मागील अनुप्रयोगातील लेआउटचा बराच पुनर्वापर करु:

पुढे, आपली तार.एक्सएमएल फाइल उघडा आणि “प्रॉक्सीटी_सेन्सर” स्ट्रिंग तयार करा. पुन्हा या स्ट्रिंगमध्ये प्लेसहोल्डर असणे आवश्यक आहे, जे अखेरीस प्रॉक्सिमिटी सेन्सरमधून काढलेल्या डेटाद्वारे लोकप्रिय केले जाईल:

प्रॉक्सिमिटीसेन्सर प्रॉक्सिमिटी सेन्सर:% 1 $ .2f जवळचा सेन्सर उपलब्ध नाही

प्रॉक्सिमिटी सेन्सरकडून डेटा मिळवत आहे

लाइट सेन्सर प्रमाणेच, अँड्रॉइडचा प्रॉक्सिमिटी सेन्सर एकच डेटा व्हॅल्यू परत करतो, म्हणजेच आम्ही आमच्या मागील अ‍ॅप्लिकेशनमधून बरेच कोड वापरू शकतो. तथापि, काही प्रमुख फरक आहेत, तसेच काही नावांशी संबंधित बदल जे या कोडचे अनुसरण करणे सुलभ करतात:

  • सेन्सर मॅनेजरचे एक उदाहरण तयार करा, जे या वेळी मी “प्रॉक्सीटी सेंसरमॅनेजर” असे नाव घेणार आहे.
  • "प्रॉक्सिमिटी सेन्सर मॅनेजर" चे उदाहरण मिळवा.
  • “प्रॉक्सिमिटीटेक्स्ट व्ह्यू” चा संदर्भ तयार करा.
  • गेटडिफॉल्ट सेन्सर () पद्धतीवर कॉल करा आणि त्यास TYPE_PROXIMITY सेन्सर द्या.
  • प्रॉक्सिमिटी सेन्सरसाठी श्रोत्यांची नोंदणी आणि नोंदणी रद्द करा.

हे चिमटा काढल्यानंतर आपण पुढील गोष्टी समाप्त केल्या पाहिजेत:

android.support.v7.app.appCompatActivity आयात करा; android.os.Bundle आयात करा; android.content.Context आयात करा; android.hardware.Sensor आयात करा; android.hardware.SensorEvent आयात करा; android.hardware.SensorManager आयात करा; android.hardware.SensorEventListener आयात करा; android.widget.TextView आयात करा; पब्लिक क्लास मेनएक्टिव्हिटीने अ‍ॅपकॉम्पॅटएक्टिव्हिटी वाढविली आहे // सेन्सरएव्हेंटलिस्टनर इंटरफेस लागू करा // सेन्सॉरएव्हेंटलिस्टनर लागू करा er // आपले व्हेरिएबल्स तयार करा // खासगी सेन्सर प्रॉक्सिमिटीसेन्सर; खाजगी सेन्सर मॅनेजर प्रॉक्सिमिटीसेन्सर मॅनेजर; खाजगी मजकूर पहा @ ओव्हरराइड संरक्षित शून्य ऑनक्रिएट (बंडल सेव्हिडइन्स्टेन्सस्टेट). सुपर.ऑनक्रिएट (सेव्हिडइन्स्टेन्सस्टेट); सेट कॉन्टेन्ट व्ह्यू (आर.लेआउट.एक्टिव्हिटी_मेन); प्रॉक्सिमिटीटेक्स्टव्यू = (टेक्स्ट व्ह्यू) फाइन्ड व्ह्यूबायआयडी (आर. आयडी. प्रॉक्सिमिटीटेक्स्ट व्ह्यू); // सेन्सरमॅनेजर // प्रॉक्सिमिटीसेन्सर मॅनेजर = (सेन्सरमॅनेजर) गेटसिस्टम सर्व्हिस (संदर्भ. सेन्सर_सर्वाइसे) प्राप्त करा; // प्रॉक्सिमिटी सेन्सरसाठी तपासा // प्रॉक्सिमिटी सेंसर = प्रॉक्सिमिटी सेन्सॉरमॅनेज.अर्जडेफॉल्ट सेन्सर (सेन्सर. टीवायपी. पीआरएक्सिमिटी); // जर प्रॉक्सिमिटी सेन्सर अस्तित्वात नसेल तर एखादी त्रुटी दाखवा // स्ट्रिंग सेन्सर_इरर = getRes स्रोत (). गेटस्ट्रिंग (आर. स्ट्रिंग.नो_सेन्सर); if (प्रॉक्सिमिटीसेन्सर == निरर्थक) {प्रॉक्सिमिटीटेक्स्टव्यू.सेटटেক্সट (सेन्सर_अररर); St} @ ओव्हरराइड संरक्षित शून्य ऑनस्टार्ट (). सुपर.ऑनस्टार्ट (); // जर वर्तमान डिव्हाइसवर सेन्सर उपलब्ध असेल तर .... // असल्यास (प्रॉक्सिमिटीसेन्सर! = शून्य) {//….त्यानंतर श्रोत्याची नोंदणी करा // प्रॉक्सिमिटीसेन्सरमॅनेज.रेग्रेस्टरलिस्टनर (हे, प्रॉक्सिमिटीसेन्सर, // आपण कितीवेळा इच्छुक आहात ते निर्दिष्ट करा) नवीन डेटा प्राप्त करा // सेन्सरमॅनेजर. सेन्सर_डेले_एनओआरएमएल); Top} @ ओव्हरराइड संरक्षित शून्य ऑनस्टॉप (). सुपर.ऑनस्टॉप (); // सिस्टीम संसाधने जपण्यासाठी आपल्या श्रोत्याची नोंदणी रद्द करा // प्रॉक्सिमिटीसेन्सरमॅनेज.अनरेगिस्टरलिस्टनर (हे); Ens @ सेन्सॉर चेंज्ड (सेन्सरएव्हेंट सेन्सरएव्हंट) ओव्हरराइड पब्लिक रिकामा {// सेन्सरचे सध्याचे मूल्य // फ्लोट करंटव्हॅल्यू = सेन्सरइव्हेंट.व्हॅल्यूज; // "प्रॉक्सिमिटी_सेन्सर" स्ट्रिंग पुनर्प्राप्त करा, नवीन मूल्य घाला आणि टेक्स्ट व्ह्यू // प्रॉक्सिमिटीटेक्स्ट व्ह्यू.सेटटेक्स्ट अद्यतनित करा (getRes स्त्रोत (). GetString (आर. स्ट्रिंग.प्रॉक्सीटी_सेन्सर, करंटव्हॅल्यू)); } @ ओव्हरराइड // जर सेन्सरची अचूकता बदलली तर .... .// सार्वजनिक रिकामे onAccuracyChanged (सेन्सर सेन्सर, इंट i) {//...TO do //}}

चाचणी: वापरकर्ता त्यांच्या डिव्हाइसशी किती जवळ आहे?

हा अनुप्रयोग प्रत्यक्ष Android स्मार्टफोन किंवा टॅब्लेटवर चाचणी घेण्यासाठी, आपल्या डिव्हाइसवर अनुप्रयोग स्थापित करा आणि नंतर आपला हात स्क्रीनकडे हलवून प्रयोग करा, आणि नंतर पुन्हा दूर हलवा. “प्रॉक्सिमिटी सेन्सर” व्हॅल्यूने आपल्या हालचाली रेकॉर्ड केल्या पाहिजेत.

फक्त लक्षात ठेवा की उपकरणांमधील निकटता सेन्सर बदलू शकतात. काही डिव्‍हाइसेस केवळ दोन निकटता मूल्ये दर्शवू शकतात - एक "जवळ" ​​सूचित करण्यासाठी आणि एक "सुदूर" सूचित करण्यासाठी - तर आपल्या भौतिक Android डिव्हाइसवर आपल्याला बरेचसे न दिसल्यास आश्चर्यचकित होऊ नका.

एमुलेटरवर या अनुप्रयोगाची चाचणी घेण्यासाठी:

  • आपला अनुप्रयोग AVD वर स्थापित करा.
  • तीन बिंदू असलेले “अधिक” बटण शोधा आणि त्यास एक क्लिक द्या, ज्याने “विस्तारित नियंत्रणे” विंडो लाँच केली.
  • विंडोच्या डावीकडील मेनूमध्ये, “व्हर्च्युअल सेन्सर” निवडा.
  • “अतिरिक्त सेन्सर” टॅब निवडा.
  • “प्रॉक्सिमिटी” स्लाइडर शोधा आणि त्या डिव्हाइसच्या जवळ जाणा object्या ऑब्जेक्टचे नक्कल करण्यासाठी डावीकडे आणि उजवीकडे ड्रॅग करा आणि नंतर पुढे. आपण स्लाइडरमध्ये बदल करता तेव्हा "प्रॉक्सिमिटी सेन्सर" ची व्हॅल्यूज बदलली पाहिजेत.

आपण पूर्ण प्रकल्प गिटहब वरून डाउनलोड करू शकता.

मोशन सेन्सर: बहुआयामी अ‍ॅरेवर प्रक्रिया करीत आहे

या टप्प्यापर्यंत, आम्ही सेन्सर्सवर लक्ष केंद्रित केले आहे जे डेटाचा एकच आयटम पुरवतो, परंतु असे काही सेन्सर आहेत जे प्रत्येक सेन्सरएव्हेंटसाठी बहुआयामी अ‍ॅरे प्रदान करतात. या बहुआयामी सेन्सर्समध्ये मोशन सेन्सर समाविष्ट आहेत, ज्यावर आपण या अंतिम विभागात लक्ष केंद्रित करणार आहोत.

मोशन सेन्सर आपल्याला मदत करू शकतात:

  • वापरकर्ता इनपुटची वैकल्पिक पद्धत प्रदान करा. उदाहरणार्थ, आपण एखादा मोबाइल गेम विकसित करीत असल्यास वापरकर्त्यास त्यांचे डिव्हाइस वाकवून त्यांचे वर्ण स्क्रीनवर हलवू शकते.
  • वापरकर्ता क्रियाकलाप अनुमान लावा. आपण अ‍ॅक्टिव्हिटी-ट्रॅकिंग अ‍ॅप तयार केला असेल तर वापरकर्ता कारमध्ये प्रवास करत असेल, जॉगिंग करत असेल किंवा त्यांच्या डेस्कवर बसला असेल की नाही हे मोजण्यात मदत करेल.
  • अभिमुखता अधिक अचूकपणे निर्धारित करा.डिव्हाइसच्या हालचालीबद्दल सर्वात अचूक अंतर्दृष्टी मिळविण्यासाठी डिव्हाइसच्या हालचाली सेन्सरमधून निर्देशांक काढणे आणि नंतर पृथ्वीच्या समन्वय प्रणालीच्या आधारावर त्यांचे भाषांतर करणे शक्य आहे.

या अंतिम विभागात आम्ही रोटेशन वेक्टर सेन्सर (TYPE_ROTATION_VECTOR) वापरत आहोत. लाइट आणि प्रॉक्सिमिटी सेन्सर्सच्या विपरीत, हा एक सॉफ्टवेअर सेन्सर आहे जो डिव्हाइसच्या अ‍ॅक्सिलरोमीटर, मॅग्नेटोमीटर आणि जायरोस्कोप सेन्सरमधील डेटा एकत्र करतो. जरी या सेन्सरसह कार्य करण्यासाठी आपल्याला अनेकदा गणितीय रूपांतरणे आणि रूपांतरणे करण्याची आवश्यकता असते, परंतु हे आपल्याला डिव्हाइसविषयी अत्यधिक अचूक माहिती देखील प्रदान करू शकते.

आम्ही मोजण्यासाठी रोटेशन वेक्टर सेन्सरचा वापर करणारा एक अनुप्रयोग तयार करत आहोत:

  • खेळपट्टी हे डिव्हाइसची सर्वात वरपासून खालची वाकण आहे.
  • रोल हे डिव्हाइसची डावीकडून उजवीकडे वाकलेली आहे.

रिअल टाइम पिच आणि रोल डेटा प्रदर्शित करीत आहे

आम्ही दोन मेट्रिक्स मोजत आहोत, म्हणून आम्हाला दोन टेक्स्ट व्ह्यू आणि दोन संबंधित स्ट्रिंग संसाधने तयार करण्याची आवश्यकता आहे:

स्ट्रिंग.एक्सएमएल फाइल उघडा आणि खालील जोडा:

मोशनसेन्सर पिच सेन्सर:% 1 $ .2f रोल सेन्सर:% 1 $ .2f मोशन सेन्सर उपलब्ध नाही

आपल्या अ‍ॅपमध्ये रोटेशन वेक्टर सेन्सर वापरणे

आम्ही आमच्या मागील अनुप्रयोगांमधील काही कोड पुन्हा वापरत आहोत, तर ज्या ठिकाणी रोटेशन वेक्टर सेन्सरद्वारे संप्रेषण केले आहे त्या क्षेत्रावर लक्ष केंद्रित करूया जे आपण आधी पाहिले त्यापेक्षा वेगळे आहे.

1. TYPE_ROTATION_VECTOR वापरा

आम्ही रोटेशन वेक्टर सेन्सरसह कार्य करीत असल्याने आम्हाला getDefaultSensor () पद्धत कॉल करणे आवश्यक आहे आणि नंतर त्यास TYPE_ROTATION_VECTOR स्थिर पाठवणे आवश्यक आहे:

पोझिशन्सरमॅनेजर.जेटडिफॉल्ट सेन्सर (सेन्सर. टीवायपी ०E_.आर.टी.टी._टी.टी.);

2. सेन्सर डेटाचे भाषांतर करा

मागील प्रकाश आणि निकटता सेन्सरच्या विपरीत, मोशन सेन्सर प्रत्येक सेन्सरएव्हेंटसाठी सेन्सर मूल्यांच्या बहुआयामी अ‍ॅरे परत करतात. ही मूल्ये मानक “एक्स, वाय, झेड” समन्वय प्रणालीचा वापर करुन स्वरूपित केली जातात, जी डिव्हाइसच्या डीफॉल्ट, “नैसर्गिक” अभिमुखतेत असताना त्याच्याशी संबंधित केली जाते.

अँड्रॉइड डिव्हाइसच्या सद्य दिशानिर्देशांशी जुळण्यासाठी या एक्स, वाय व झेड समन्वय साधत नाही, म्हणून डिव्हाइस पोर्ट्रेट किंवा लँडस्केप मोडमध्ये आहे की नाही याची पर्वा न करता “एक्स” अक्ष समान राहील. रोटेशन वेक्टर सेन्सर वापरताना, आपल्याला डिव्हाइसच्या सद्य रोटेशनशी जुळण्यासाठी येणारा डेटा रूपांतरित करण्याची आवश्यकता असू शकते.

पोर्ट्रेट हे बहुतेक स्मार्टफोनचे डीफॉल्ट अभिमुखता आहे परंतु आपण असे समजू नका की हे असे होणार आहे सर्व Android डिव्हाइस, विशेषत: टॅब्लेट. या लेखात, आम्ही सेन्सरचा डेटा त्याच्या मूळ भाषांतरित करण्यासाठी रोटेशन मॅट्रिक्स वापरू, डिव्हाइस समन्वय प्रणाली, करण्यासाठी पृथ्वीचे समन्वय प्रणाली, जी पृथ्वीच्या तुलनेत डिव्हाइसची गती आणि स्थितीचे प्रतिनिधित्व करते. आवश्यक असल्यास, आम्ही त्यानंतर डिव्हाइसच्या वर्तमान अभिमुखतेवर आधारित सेन्सर डेटा रीमॅप करू शकतो.

प्रथम, डिव्हाइस समन्वय प्रणाली ही एक मानक 3-अक्षांची एक्स, वाय, झेड समन्वय प्रणाली आहे, जेथे तीन अक्षावरील प्रत्येक बिंदू 3 डी वेक्टरद्वारे दर्शविला जातो. याचा अर्थ आम्हाला 9 फ्लोट व्हॅल्यूजची अ‍ॅरे तयार करण्याची आवश्यकता आहे:

फ्लोट रोटेशनमॅट्रिक्स = नवीन फ्लोट;

त्यानंतर आम्ही हे अ‍ॅरे गेट रोटेशनमॅट्रिक्स () पद्धतीत पास करू शकतो.

सेन्सरमॅनेज.बेट रोटेशनमॅट्रिक्सफ्रॅम वेक्टर (रोटेशनमॅट्रिक्स, वेक्टर); इंट वर्ल्डएक्सिसएक्स = सेन्सरमॅनेज.अॅक्सिस_एक्स; इंट वर्ल्डएक्सिसझेड = सेन्सरमॅनेज.अॅक्सिस_झेड;

पुढील चरण, सेन्सॉर डेटा व्यवस्थापित करण्यासाठी सेन्सॉर मॅनेज.रेमॅपकोर्डिनेटसिस्टम () पद्धत वापरुन डिव्हाइसच्या सद्यस्थितीवर आधारित आहे.

सेन्सरमॅनेज.रेमॅपकोर्डिनेटसिस्टम () पद्धत खालील युक्तिवाद घेते:

  • मूळ रोटेशन मॅट्रिक्स.
  • आपण रीमॅप करू इच्छित अक्ष.
  • आपण या नवीन डेटासह लोकप्रिय करीत असलेला अ‍ॅरे.

माझ्या अ‍ॅपमध्ये मी वापरत असलेला कोड हा आहेः

फ्लोट ustedडजस्टड्रॉटेशनमॅट्रिक्स = नवीन फ्लोट; सेन्सरमॅनेज.रेरेमॅपकॉर्डिनेटसिस्टम (रोटेशनमॅट्रिक्स, वर्ल्डएक्सिसएक्स, वर्ल्डएक्सिसझेड, ustedडजेस्ट रोटेशनमॅट्रिक्स);

शेवटी, आम्ही सेन्सरमॅनेज.जेट ओरिएंटेशनला कॉल करू आणि त्यास ustedडजस्ट केलेले रोटेशनमॅट्रिक्स वापरण्यास सांगा:

सेन्सरमॅनेज.गेट ऑरिएंटेशन (adjडजेस्ट रोटेशनमॅट्रिक्स, ओरिएंटेशन);

3. प्लेसहोल्डरच्या तारांचे अद्यतनित करा

आमच्याकडे दोन सेट डेटा (खेळपट्टी आणि रोल) असल्याने आम्हाला दोन स्वतंत्र प्लेसहोल्डर तार शोधून काढणे आवश्यक आहे, त्यास योग्य मूल्यांसह प्रसिध्द करणे आणि त्यानंतर संबंधित मजकूर दृश्य अद्यतनित करणे आवश्यक आहे:

pitchTextView.setText (getRes स्त्रोत (). getString (आर. स्ट्रिंग.पीच_सेन्सर, पिच)); रोलटेक्स्टव्यू.सेटटेक्स्ट (गेटआरसोर्सस (). गेटस्ट्रिंग (आर. स्ट्रिंग. रोल_सेन्सर, रोल));

एकाधिक सेन्सर डेटा प्रदर्शित करीत आहे: पूर्ण केलेला कोड

वरील चरणांचे कार्य केल्यानंतर, आपली मुख्य क्रियाकलाप यासारखे दिसले पाहिजे:

android.app.Activity आयात करा; android.os.Bundle आयात करा; android.hardware.Sensor आयात करा; android.hardware.SensorEvent आयात करा; android.hardware.SensorEventListener आयात करा; android.hardware.SensorManager आयात करा; android.widget.TextView आयात करा; पब्लिक क्लास मेनएक्टिविटी विस्तारित क्रियाकलाप उपकरणे सेन्सरएव्हेंटलिस्टर {खासगी सेन्सरमॅनेजर मोशनसेन्सरमॅनेजर; खाजगी सेन्सर मोशन सेन्सर; खाजगी मजकूर पहा खाजगी मजकूर दृश्य रोलटेक्स्टव्ह्यू; खासगी स्थिर अंतिम SENSOR_DELAY = 500 * 1000; खाजगी स्थिर अंतिम FROM_RADS_TO_DEGS = -57; @ ओव्हरराइड संरक्षित शून्य ऑनक्रिएट (बंडल सेव्हिडइन्स्टेन्सस्टेट). सुपर.ऑनक्रिएट (सेव्हिडइन्स्टेन्सस्टेट); सेट कॉन्टेन्ट व्ह्यू (आर.लेआउट.एक्टिव्हिटी_मेन); पिचटेक्स्टव्यू = (टेक्स्ट व्ह्यू) फाइंड व्ह्यूबायआयडी (आर. आयडी. पिचटेक्स्ट व्ह्यू); रोलटेक्स्टव्यू = (टेक्स्ट व्ह्यू) शोध व्ह्यूबायआयडी (आर. आयडी. रोल टेकव्यूव्ह); प्रयत्न करा {मोशनसेन्सरमॅनेजर = (सेन्सरमॅनेजर) गेटसिस्टम सर्व्हर (tivityक्टिव्हिटी.सेनसॉर_सर्वाइसे); मोशनसेन्सर = मोशनसेन्सरमॅनेज.जेटडिफॉल्ट सेन्सर (सेन्सर. टीवायपी ०E_.आर.टी.टी.आर.टी.टी.); मोशनसेन्सरमॅनेरेज.ग्रिस्टरलिस्टनर (हे, मोशनसेन्सर, सेन्सर_डिले); } कॅच (अपवाद ई) itch पिचटेक्स्टव्ह्यू.सेट टेकस्ट (आर. स्ट्रिंग.नो_सेन्सर); रोलटेक्स्टव्यू.सेटटेक्स्ट (आर .स्ट्रिंग.नो_सेन्सर); Cc} @AcuracyChanged (सेन्सर सेन्सर, इंटी अचूकता) वर ओवरराइड पब्लिक रिक्त }} खाजगी शून्य अद्यतन (फ्लोट वेक्टर) {// रोटेशन मॅट्रिक्सची गणना करा // फ्लोट रोटेशनमॅट्रिक्स = नवीन फ्लोट; सेन्सरमॅनेज.बेट रोटेशनमॅट्रिक्सफ्रॅम वेक्टर (रोटेशनमॅट्रिक्स, वेक्टर); इंट वर्ल्डएक्सिसएक्स = सेन्सरमॅनेज.अॅक्सिस_एक्स; इंट वर्ल्डएक्सिसझेड = सेन्सरमॅनेज.अॅक्सिस_झेड; // क्रियाकलापांच्या वर्तमान अभिमुखतेवर आधारित मॅट्रिक्स रीमॅप करा // फ्लोट ustedडजेस्ट रोटेशनमॅट्रिक्स = नवीन फ्लोट; सेन्सरमॅनेज.रेरेमॅपकॉर्डिनेटसिस्टम (रोटेशनमॅट्रिक्स, वर्ल्डएक्सिसएक्स, वर्ल्डएक्सिसझेड, ustedडजेस्ट रोटेशनमॅट्रिक्स); // डिव्‍हाइसेस ओरिएंटेशनची गणना करा // फ्लोट ओरिएंटेशन = नवीन फ्लोट; // गेटऑरिएंटेशन () पद्धतीत // फ्लोट व्हॅल्यूजचा अ‍ॅरे पुरवठा करा (सेन्सरमॅनेज.जेटओरिएंटेशन (ustedडजेस्ट रोटेशनमॅट्रिक्स, ओरिएंटेशन)); फ्लोट खेळपट्टी = अभिमुखता * FROM_RADS_TO_DEGS; फ्लोट रोल = अभिमुखता * FROM_RADS_TO_DEGS; // पीच आणि रोल व्हॅल्यूजसह टेक्स्ट व्ह्यूज अद्यतनित करा // पिचटेक्स्टव्यू.सेटटेकट (गेट रीसोर्सस (). गेटस्ट्रिंग (आर. स्ट्रिंग.पीच_सेन्सर, पिच)); रोलटेक्स्टव्यू.सेटटेक्स्ट (गेटआरसोर्सस (). गेटस्ट्रिंग (आर. स्ट्रिंग. रोल_सेन्सर, रोल)); }}

आपण पूर्ण प्रकल्प गिटहब वरून डाउनलोड करू शकता.

आमच्या अंतिम Android सेन्सर अनुप्रयोगाची चाचणी घेत आहे

प्रत्यक्ष Android स्मार्टफोन किंवा टॅब्लेटवर या रोटेशन वेक्टर Android सेन्सर अॅपची चाचणी घेण्यासाठी:

  • आपल्या डिव्हाइसवर अनुप्रयोग स्थापित करा.
  • आपला स्मार्टफोन किंवा टॅब्लेट सपाट पृष्ठभागावर ठेवा. लक्षात घ्या की मोशन सेन्सर अत्यंत संवेदनशील असतात, म्हणून उंचवटा-गती नसलेल्या डिव्हाइससाठी खेळपट्टीवर आणि रोल मूल्यांमध्ये चढ-उतार नोंदवणे असामान्य नाही.
  • खेळपट्टीची चाचणी घेण्यासाठी, आपल्या डिव्हाइसचे तळ उचला जेणेकरून ते आपल्यापासून दूर जात आहे. खेळपट्टीचे मूल्य नाटकीयरित्या बदलले पाहिजे.
  • रोलची चाचणी घेण्यासाठी आपल्या डिव्हाइसची डावी बाजू उचलून पहा म्हणजे ते डावीकडे झुकते आहे - त्या रोल मूल्यावर लक्ष ठेवा!

आपण इमुलेटरवर आपल्या प्रोजेक्टची चाचणी घेत असल्यास:

  • आपल्या एव्हीडीवर अनुप्रयोग स्थापित करा.
  • “विस्तारित नियंत्रणे” विंडो लॉन्च करणारी “मोअर” निवडा.
  • डावीकडील मेनूमध्ये, “व्हर्च्युअल सेन्सर” निवडा.
  • “एक्सेलरमीटर” टॅब निवडलेला असल्याची खात्री करा. या टॅबमध्ये अशी नियंत्रणे आहेत जी डिव्हाइसच्या स्थान आणि अभिमुखतेत बदल घडवून आणू शकतात.
  • आपल्या अ‍ॅप्लिकेशनच्या “रोल सेंसर” चा कसा परिणाम होतो हे पाहण्यासाठी विविध स्लाइडर (फिरवा: झेड-रोट, एक्स-रोट, वाय-रोट; आणि मूव्ह: एक्स, वाय, आणि झेड) आणि विविध “डिव्हाइस रोटेशन” बटणांवर प्रयोग करून पहा. ”आणि“ पिच सेन्सर ”व्हॅल्यूज.

लपेटणे

या लेखामध्ये, आम्ही Android सेन्सरच्या तीन मुख्य श्रेणींमधून डेटा कसा मिळवायचा ते पाहिले: पर्यावरणीय, स्थिती आणि गती आणि वास्तविक डेटामध्ये या डेटाचे परीक्षण कसे करावे.

आपण असे कोणतेही Android अ‍ॅप्स पाहिले आहेत जे मनोरंजक किंवा अनन्य मार्गाने सेन्सर्स वापरतात? आम्हाला खाली टिप्पण्या कळू द्या!

मशीन लर्निंग (एमएल) आपल्या मोबाइल वापरकर्त्यांसाठी नाविन्यपूर्ण, आकर्षक आणि अनोखा अनुभव तयार करण्यात आपली मदत करू शकते.एकदा आपण एमएल वर प्रभुत्व मिळविल्यानंतर आपण त्याचा वापर आपल्या अ‍ॅप्स विषयावर आधा...

बर्‍याच प्रोग्रामर किंवा उद्योजकासाठी “अ‍ॅप लक्षाधीश” होणे हे अंतिम स्वप्न असते. आपल्याकडे असलेल्या स्मार्ट कल्पनेमुळे आपल्याला पुन्हा कधीही काम करावे लागणार नाही हे जाणून एक आश्चर्यकारक भावना असणे आव...

अलीकडील लेख