విషయము
- నేను ఏ Android సెన్సార్లను ఉపయోగించగలను?
- పర్యావరణ సెన్సార్లు: పరిసర కాంతిని కొలవడం
- మీ సెన్సార్ డేటాను ప్రదర్శిస్తుంది
- సెన్సార్తో కమ్యూనికేట్ చేయడం: సెన్సార్ మేనేజర్, సెన్సార్ఈవెంట్స్ మరియు శ్రోతలు
- 1. సెన్సార్ మేనేజర్ యొక్క ఉదాహరణను పొందండి
- 2. లైట్టెక్స్ట్ వ్యూకు సూచన పొందండి
- 3. ప్రస్తుత పరికరంలో సెన్సార్ ఉందో లేదో తనిఖీ చేయండి
- 4. మీ సెన్సార్ శ్రోతలను నమోదు చేయండి
- 5. సెన్సార్ఈవెంట్లిస్టెనర్ కాల్బ్యాక్లను అమలు చేయండి
- onSensorChanged ()
- onAccuracyChanged ()
- 6. సెన్సార్ విలువను తిరిగి పొందండి
- 7. మీ శ్రోతలను నమోదు చేయవద్దు
- Android యొక్క లైట్ సెన్సార్లను ఉపయోగించడం: పూర్తయిన కోడ్
- మీ పూర్తి చేసిన Android సెన్సార్ అనువర్తనాన్ని పరీక్షించండి
- Android యొక్క సామీప్య సెన్సార్లతో దూరాన్ని కొలవడం
- వినియోగదారు ఇంటర్ఫేస్ను సృష్టిస్తోంది
- సామీప్య సెన్సార్ నుండి డేటాను పొందడం
- పరీక్ష: వినియోగదారు వారి పరికరానికి ఎంత దగ్గరగా ఉన్నారు?
- మోషన్ సెన్సార్లు: మల్టీ డైమెన్షనల్ అర్రేలను ప్రాసెస్ చేస్తోంది
- రియల్ టైమ్ పిచ్ మరియు రోల్ డేటాను ప్రదర్శిస్తుంది
- మీ అనువర్తనంలో భ్రమణ వెక్టర్ సెన్సార్ను ఉపయోగించడం
- 1. TYPE_ROTATION_VECTOR ని ఉపయోగించండి
- 2. సెన్సార్ డేటాను అనువదించండి
- 3. ప్లేస్హోల్డర్ తీగలను నవీకరించండి
- బహుళ సెన్సార్ డేటాను ప్రదర్శిస్తుంది: పూర్తయిన కోడ్
- మా చివరి Android సెన్సార్ అనువర్తనాన్ని పరీక్షిస్తోంది
- చుట్టి వేయు
నేడు, చాలా ఆధునిక ఆండ్రాయిడ్ పరికరాలు కొన్ని సెన్సార్లతో తయారు చేయబడ్డాయి.
మీరు ఈ సమాచారాన్ని అనేక రకాలుగా ఉపయోగించవచ్చు - ఇది కాంతి స్థాయిలను పర్యవేక్షిస్తుందా కాబట్టి మీ అప్లికేషన్ స్వయంచాలకంగా దాని ప్రకాశం లేదా రంగు పథకాన్ని సర్దుబాటు చేస్తుంది; వారి పరికరాన్ని టిల్ట్ చేయడం వంటి సంజ్ఞలను ఉపయోగించి మీ మొబైల్ గేమ్తో ఇంటరాక్ట్ అవ్వడానికి వినియోగదారుని అనుమతిస్తుంది; లేదా వినియోగదారు వారి పరికరాన్ని చెవికి పట్టుకున్నప్పుడల్లా టచ్ ఈవెంట్లను స్వయంచాలకంగా నిలిపివేయడానికి సామీప్య సెన్సార్ను ఉపయోగించడం.
ఈ వ్యాసంలో, మేము హార్డ్వేర్ మరియు సాఫ్ట్వేర్ సెన్సార్ల శ్రేణి నుండి కాంతి, సామీప్యం మరియు చలన డేటాను తిరిగి పొందే మూడు అనువర్తనాలను సృష్టిస్తాము. మేము ఈ Android సెన్సార్లను నిజ సమయంలో కూడా పర్యవేక్షిస్తాము, కాబట్టి మీ అనువర్తనానికి ఎల్లప్పుడూ తాజా సమాచారానికి ప్రాప్యత ఉంటుంది.
ఈ వ్యాసం ముగిసే సమయానికి, ఆండ్రాయిడ్ సెన్సార్ నుండి ఒక్క డేటాను ఎలా తీయాలి మరియు వాటి డేటాను బహుమితీయ శ్రేణి రూపంలో అందించే సెన్సార్లను ఎలా నిర్వహించాలో మీకు తెలుస్తుంది.
నేను ఏ Android సెన్సార్లను ఉపయోగించగలను?
Android సెన్సార్లను క్రింది వర్గాలుగా విభజించవచ్చు:
- పర్యావరణ సెన్సార్లు. ఇవి గాలి ఉష్ణోగ్రత, పీడనం, తేమ మరియు పరిసర కాంతి స్థాయిలు వంటి పర్యావరణ పరిస్థితులను కొలుస్తాయి.
- స్థానం సెన్సార్లు. ఈ వర్గంలో సామీప్య సెన్సార్లు మరియు భౌగోళిక అయస్కాంత క్షేత్ర సెన్సార్లు వంటి పరికరం యొక్క భౌతిక స్థానాన్ని కొలిచే సెన్సార్లు ఉన్నాయి.
మోషన్ సెన్సార్లు. ఈ సెన్సార్లు పరికర కదలికను కొలుస్తాయి మరియు యాక్సిలెరోమీటర్లు, గురుత్వాకర్షణ సెన్సార్లు, గైరోస్కోప్లు మరియు భ్రమణ వెక్టర్ సెన్సార్లు ఉన్నాయి.
అదనంగా, సెన్సార్లు కావచ్చు:
- హార్డ్వేర్ ఆధారిత. ఇవి పరికరంలో నిర్మించబడిన భౌతిక భాగాలు మరియు త్వరణం లేదా చుట్టుపక్కల ఉన్న భూ అయస్కాంత క్షేత్రాల బలం వంటి నిర్దిష్ట లక్షణాలను నేరుగా కొలుస్తాయి.
- సాఫ్ట్వేర్ ఆధారిత, కొన్నిసార్లు వర్చువల్ సెన్సార్లు లేదా మిశ్రమ సెన్సార్లు అని పిలుస్తారు. ఇవి సాధారణంగా బహుళ హార్డ్వేర్ ఆధారిత సెన్సార్ల నుండి డేటాను కలుస్తాయి. ఈ వ్యాసం చివరలో, మేము భ్రమణ వెక్టర్ సెన్సార్తో పని చేస్తాము, ఇది పరికరం యొక్క యాక్సిలెరోమీటర్, మాగ్నెటోమీటర్ మరియు గైరోస్కోప్ నుండి డేటాను మిళితం చేసే సాఫ్ట్వేర్ సెన్సార్.
పర్యావరణ సెన్సార్లు: పరిసర కాంతిని కొలవడం
Android యొక్క లైట్ సెన్సార్ "లక్స్" యూనిట్లలో పరిసర కాంతిని కొలుస్తుంది, ఇది మానవ కన్ను గ్రహించిన కాంతి యొక్క తీవ్రత. సెన్సార్ నివేదించిన లక్స్ విలువ పరికరాల్లో మారుతూ ఉంటుంది, కాబట్టి మీ అనువర్తనానికి స్థిరమైన విలువలు అవసరమైతే, మీరు మీ అనువర్తనంలో ఉపయోగించే ముందు ముడి డేటాను మార్చవలసి ఉంటుంది.
ఈ విభాగంలో, పరికరం యొక్క లైట్ సెన్సార్ నుండి ప్రస్తుత లక్స్ విలువను తిరిగి పొందే, టెక్స్ట్ వ్యూలో ప్రదర్శించే, ఆపై క్రొత్త డేటా అందుబాటులోకి వచ్చినప్పుడు టెక్స్ట్ వ్యూని నవీకరించే అనువర్తనాన్ని మేము సృష్టించబోతున్నాము.అప్పుడు మీరు ఈ సమాచారాన్ని అనేక రకాల అనువర్తనాలలో ఉపయోగించవచ్చు, ఉదాహరణకు మీరు లైట్ సెన్సార్ నుండి సమాచారాన్ని లాగే టార్చ్ అప్లికేషన్ను సృష్టించవచ్చు మరియు ప్రస్తుత కాంతి స్థాయిల ఆధారంగా దాని పుంజం యొక్క బలాన్ని స్వయంచాలకంగా సర్దుబాటు చేస్తుంది.
మీకు నచ్చిన సెట్టింగ్లతో క్రొత్త Android ప్రాజెక్ట్ను సృష్టించండి మరియు ప్రారంభిద్దాం!
మీ సెన్సార్ డేటాను ప్రదర్శిస్తుంది
నేను టెక్స్ట్ వ్యూని జోడించబోతున్నాను, అది చివరికి మేము లైట్ సెన్సార్ నుండి సేకరించిన డేటాను ప్రదర్శిస్తుంది. క్రొత్త డేటా అందుబాటులోకి వచ్చినప్పుడల్లా ఈ టెక్స్ట్ వ్యూ అప్డేట్ అవుతుంది, కాబట్టి వినియోగదారుకు ఎల్లప్పుడూ తాజా సమాచారానికి ప్రాప్యత ఉంటుంది.
మీ ప్రాజెక్ట్ యొక్క activity_main.xml ఫైల్ను తెరిచి, కింది వాటిని జోడించండి:
తరువాత, మన లేఅవుట్లో ప్రస్తావించబడిన “లైట్_సెన్సర్” స్ట్రింగ్ వనరును సృష్టించాలి. మీ ప్రాజెక్ట్ యొక్క strings.xml ఫైల్ను తెరిచి, కింది వాటిని జోడించండి:
“% 1 $ .2f” అనేది మేము ప్రదర్శించదలిచిన సమాచారాన్ని పేర్కొనే ప్లేస్హోల్డర్ మరియు దానిని ఎలా ఫార్మాట్ చేయాలి:
- %1. మీరు ఒకే స్ట్రింగ్ వనరులో బహుళ ప్లేస్హోల్డర్లను చేర్చవచ్చు; “% 1” మేము ఒకే ప్లేస్హోల్డర్ను ఉపయోగిస్తున్నట్లు సూచిస్తుంది.
- $.2. ప్రతి ఇన్కమింగ్ ఫ్లోటింగ్ పాయింట్ విలువను మా అప్లికేషన్ ఎలా ఫార్మాట్ చేయాలో ఇది నిర్దేశిస్తుంది. “$ .2” విలువ రెండు దశాంశ స్థానాలకు గుండ్రంగా ఉండాలని సూచిస్తుంది.
- ఎఫ్ విలువను ఫ్లోటింగ్ పాయింట్ సంఖ్యగా ఫార్మాట్ చేయండి.
కొన్ని సెన్సార్లు ఇతరులకన్నా సాధారణం అయితే, ప్రతి పరికరానికి ఖచ్చితమైన హార్డ్వేర్ మరియు సాఫ్ట్వేర్లకు ప్రాప్యత ఉందని మీరు ఎప్పుడూ అనుకోకూడదు. Android ప్లాట్ఫామ్ తరువాత విడుదలయ్యే వరకు కొన్ని సెన్సార్లు ప్రవేశపెట్టబడనందున, సెన్సార్ లభ్యత Android యొక్క వివిధ వెర్షన్లలో కూడా మారవచ్చు.
Android సెన్సార్ ఫ్రేమ్వర్క్ను ఉపయోగించి పరికరంలో నిర్దిష్ట సెన్సార్ ఉందో లేదో మీరు తనిఖీ చేయవచ్చు. అప్పుడు మీరు సెన్సార్ లభ్యత ఆధారంగా మీ అప్లికేషన్ యొక్క భాగాలను నిలిపివేయవచ్చు లేదా ప్రారంభించవచ్చు లేదా మీ అప్లికేషన్ యొక్క కొన్ని లక్షణాలు .హించిన విధంగా పనిచేయవు అని వివరిస్తూ ప్రదర్శించవచ్చు.
మన strings.xml ఫైల్ తెరిచినప్పుడు, “no_sensor” స్ట్రింగ్ను క్రియేట్ చేద్దాం, లైట్ సెన్సార్ అందుబాటులో లేకుంటే మేము ప్రదర్శిస్తాము:
ఒక నిర్దిష్ట సెన్సార్కి ప్రాప్యత లేకుండా మీ అప్లికేషన్ మంచి వినియోగదారు అనుభవాన్ని అందించలేకపోతే, మీరు ఈ సమాచారాన్ని మీ మానిఫెస్ట్లో జోడించాలి. ఉదాహరణకు, మీ అనువర్తనానికి దిక్సూచి సెన్సార్కి ప్రాప్యత అవసరమైతే, మీరు ఈ క్రింది వాటిని ఉపయోగించవచ్చు:
ఇప్పుడు, మీ అనువర్తనం దిక్సూచి సెన్సార్ ఉన్న పరికరాలకు మాత్రమే డౌన్లోడ్ చేయబడుతుంది.
ఇది మీ ప్రేక్షకులను పరిమితం చేయగలిగినప్పటికీ, వారు మీ అప్లికేషన్ను డౌన్లోడ్ చేసుకోవడానికి ఎవరైనా అనుమతించడం కంటే ఇది చాలా తక్కువ నష్టం కలిగిస్తుంది హామీ వారి పరికరం యొక్క సెన్సార్ కాన్ఫిగరేషన్ కారణంగా చెడు అనుభవాన్ని పొందడం.
సెన్సార్తో కమ్యూనికేట్ చేయడం: సెన్సార్ మేనేజర్, సెన్సార్ఈవెంట్స్ మరియు శ్రోతలు
పరికరం యొక్క లైట్ సెన్సార్తో కమ్యూనికేట్ చేయడానికి, మీరు ఈ క్రింది దశలను పూర్తి చేయాలి:
1. సెన్సార్ మేనేజర్ యొక్క ఉదాహరణను పొందండి
సెన్సార్ మేనేజర్ మీరు పరికరం యొక్క పూర్తి స్థాయి సెన్సార్లను యాక్సెస్ చేయడానికి అవసరమైన అన్ని పద్ధతులను అందిస్తుంది.
ప్రారంభించడానికి, సెన్సార్ మేనేజర్ యొక్క ఉదాహరణను కలిగి ఉన్న వేరియబుల్ను సృష్టించండి:
ప్రైవేట్ సెన్సార్ మేనేజర్ లైట్సెన్సర్ మేనేజర్;
అప్పుడు, మీరు Context.getSystemService పద్ధతిని పిలిచి, కాంటెక్స్ట్లో ఉత్తీర్ణత సాధించడం ద్వారా సెన్సార్ మేనేజర్ యొక్క ఉదాహరణను పొందాలి. SENSOR_SERVICE వాదన:
lightSensorManager = (సెన్సార్ మేనేజర్) getSystemService (సందర్భం. SENSOR_SERVICE);
2. లైట్టెక్స్ట్ వ్యూకు సూచన పొందండి
తరువాత, మన టెక్స్ట్ వ్యూ వస్తువులను కలిగి ఉన్న ఒక ప్రైవేట్ సభ్యుల వేరియబుల్ ను సృష్టించాలి మరియు దానిని మా టెక్స్ట్ వ్యూకు కేటాయించండి:
ప్రైవేట్ టెక్స్ట్ వ్యూ లైట్టెక్స్ట్ వ్యూ; ... ... ... lightTextView = (టెక్స్ట్ వ్యూ) findViewById (R.id.lightTextView);
3. ప్రస్తుత పరికరంలో సెన్సార్ ఉందో లేదో తనిఖీ చేయండి
GetDefaultSensor () పద్ధతిని పిలవడం ద్వారా మీరు నిర్దిష్ట సెన్సార్కి ప్రాప్యతను పొందవచ్చు, ఆపై దాన్ని ప్రశ్నార్థక సెన్సార్కు పంపవచ్చు. లైట్ సెన్సార్ కోసం టైప్ స్థిరాంకం TYPE_LIGHT, కాబట్టి మేము ఈ క్రింది వాటిని ఉపయోగించాలి:
lightSensor = lightSensorManager.getDefaultSensor (సెన్సార్. TYPE_LIGHT);
ఈ పరికరంలో సెన్సార్ లేకపోతే, అప్పుడు getDefaultSensor () పద్ధతి శూన్యంగా తిరిగి వస్తుంది మరియు మేము “no_sensor” స్ట్రింగ్ను ప్రదర్శిస్తాము:
స్ట్రింగ్ సెన్సార్_రర్ = getResources (). GetString (R.string.no_sensor); if (lightSensor == null) {lightTextView.setText (సెన్సార్_టెర్రర్); }}
4. మీ సెన్సార్ శ్రోతలను నమోదు చేయండి
సెన్సార్ కొత్త డేటాను కలిగి ఉన్న ప్రతిసారీ, Android సెన్సార్ ఎవెంట్ వస్తువును ఉత్పత్తి చేస్తుంది. ఈ సెన్సార్ఈవెంట్ ఆబ్జెక్ట్ ఈవెంట్ను సృష్టించిన సెన్సార్, టైమ్స్టాంప్ మరియు క్రొత్త డేటా విలువను కలిగి ఉంటుంది.
ప్రారంభంలో, మేము కాంతి మరియు సామీప్య సెన్సార్లపై దృష్టి పెడతాము, ఇవి ఒక్క డేటాను తిరిగి ఇస్తాయి. ఏదేమైనా, కొన్ని సెన్సార్లు ప్రతి సెన్సార్ ఎవెంట్కు భ్రమణ వెక్టర్ సెన్సార్తో సహా బహుమితీయ శ్రేణులను అందిస్తాయి, వీటిని మేము ఈ వ్యాసం చివరలో అన్వేషిస్తాము.
ఈ సెన్సార్ఈవెంట్ వస్తువుల గురించి మా అప్లికేషన్ తెలియజేయబడిందని నిర్ధారించడానికి, సెన్సార్ మేనేజర్ యొక్క రిజిస్టర్ లిస్టెనర్ () ను ఉపయోగించి, నిర్దిష్ట సెన్సార్ ఈవెంట్ కోసం మేము వినేవారిని నమోదు చేయాలి.
రిజిస్టర్ లిస్టెనర్ () పద్ధతి క్రింది వాదనలను తీసుకుంటుంది:
- అనువర్తనం లేదా కార్యాచరణ సందర్భం.
- మీరు పర్యవేక్షించదలిచిన సెన్సార్ రకం.
- సెన్సార్ కొత్త డేటాను పంపాల్సిన రేటు. అధిక రేటు మీ అనువర్తనానికి మరింత డేటాను అందిస్తుంది, అయితే ఇది ఎక్కువ సిస్టమ్ వనరులను కూడా ఉపయోగిస్తుంది, ముఖ్యంగా బ్యాటరీ జీవితం. పరికరం యొక్క బ్యాటరీని సంరక్షించడంలో సహాయపడటానికి, మీ అనువర్తనానికి అవసరమైన కనీస డేటాను మీరు అభ్యర్థించాలి. నేను SensorManager.SENSOR_DELAY_NORMAL ను ఉపయోగించబోతున్నాను, ఇది ప్రతి 200,000 మైక్రోసెకన్లకు (0.2 సెకన్లు) ఒకసారి క్రొత్త డేటాను పంపుతుంది.
సెన్సార్ వినడం వల్ల పరికరం యొక్క బ్యాటరీ తగ్గిపోతుంది కాబట్టి, మీరు మీ అప్లికేషన్ యొక్క ఆన్ క్రియేట్ () పద్ధతిలో శ్రోతలను ఎప్పుడూ నమోదు చేయకూడదు, ఎందుకంటే ఇది మీ అప్లికేషన్ నేపథ్యంలో ఉన్నప్పుడు కూడా సెన్సార్లు డేటాను పంపడం కొనసాగిస్తుంది.
బదులుగా, మీరు మీ సెన్సార్లను అప్లికేషన్ యొక్క ఆన్స్టార్ట్ () జీవితచక్ర పద్ధతిలో నమోదు చేయాలి:
Ver ఓవర్రైడ్ రక్షిత శూన్యత ఆన్స్టార్ట్ () {super.onStart (); // ప్రస్తుత పరికరంలో సెన్సార్ అందుబాటులో ఉంటే ... // if (lightSensor! = Null) {//….అప్పుడు వినడం ప్రారంభించండి // lightSensorManager.registerListener (ఇది, lightSensor, SensorManager.SENSOR_DELAY_NORMAL); }}
5. సెన్సార్ఈవెంట్లిస్టెనర్ కాల్బ్యాక్లను అమలు చేయండి
సెన్సార్ఈవెంట్లిస్టెనర్ అనేది సెన్సార్ మేనేజర్ నుండి నోటిఫికేషన్లను స్వీకరించే ఇంటర్ఫేస్
క్రొత్త డేటా అందుబాటులో ఉన్నప్పుడు లేదా సెన్సార్ యొక్క ఖచ్చితత్వం మారినప్పుడు.
మొదటి దశ, సెన్సార్ఈవెంట్లిస్టెనర్ ఇంటర్ఫేస్ను అమలు చేయడానికి మా తరగతి సంతకాన్ని సవరించడం:
పబ్లిక్ క్లాస్ మెయిన్ఆక్టివిటీ AppCompatActivity సెన్సార్ఈవెంట్లిస్టెనర్ ple ని అమలు చేస్తుంది
మేము ఈ క్రింది బ్యాక్ పద్ధతులను అమలు చేయాలి:
onSensorChanged ()
ప్రతి కొత్త సెన్సార్ఈవెంట్కు ప్రతిస్పందనగా ఈ పద్ధతిని పిలుస్తారు.
సెన్సార్ డేటా తరచుగా వేగంగా మారుతుంది, కాబట్టి మీ అప్లికేషన్ రోజూ onSensorChanged () పద్ధతిని పిలుస్తుంది. మీ అప్లికేషన్ సజావుగా నడుచుకోవడంలో సహాయపడటానికి, మీరు ఆన్సెన్సార్చాంగ్డ్ () పద్ధతిలో సాధ్యమైనంత తక్కువ పనిని చేయాలి.
Se సెన్సార్చాంగ్డ్ (సెన్సార్ఈవెంట్ సెన్సార్ఈవెంట్) పై పబ్లిక్ శూన్యతను అధిగమించండి {// చేయడానికి //}
onAccuracyChanged ()
సెన్సార్ యొక్క ఖచ్చితత్వం మెరుగుపడితే లేదా క్షీణించినట్లయితే, ఆండ్రాయిడ్ ఆన్అక్యూరసీచాంగెడ్ () పద్ధతిని పిలుస్తుంది మరియు SENSOR_STATUS_UNRELIABLE లేదా SENSOR_STATUS_ACCURACY_HIGH వంటి కొత్త ఖచ్చితత్వ విలువను కలిగి ఉన్న సెన్సార్ వస్తువును పాస్ చేస్తుంది.
లైట్ సెన్సార్ ఖచ్చితత్వ మార్పులను నివేదించదు, కాబట్టి నేను ఆన్అక్యూరసీచాంగ్డ్ () బ్యాక్బ్యాక్ను ఖాళీగా వదిలివేస్తాను:
Ac అక్యూరసీచాంగ్డ్ (సెన్సార్ సెన్సార్, పూర్ణాంకం) public // పబ్లిక్ శూన్యతను ఓవర్రైడ్ చేయండి {// చేయడానికి //}}
6. సెన్సార్ విలువను తిరిగి పొందండి
మనకు క్రొత్త విలువ వచ్చినప్పుడల్లా, మేము onSensorChanged () పద్ధతిని పిలవాలి మరియు “light_sensor” స్ట్రింగ్ను తిరిగి పొందాలి. అప్పుడు మేము స్ట్రింగ్ యొక్క ప్లేస్హోల్డర్ వచనాన్ని (% 1 $ .2f) భర్తీ చేయవచ్చు మరియు మా టెక్స్ట్ వ్యూలో భాగంగా నవీకరించబడిన స్ట్రింగ్ను ప్రదర్శించవచ్చు:
Se సెన్సార్చాంగ్డ్ (సెన్సార్ఈవెంట్ సెన్సార్ఈవెంట్) పై పబ్లిక్ శూన్యతను అధిగమించండి {// సెన్సార్ యొక్క ప్రస్తుత విలువ // ఫ్లోట్ కరెంట్వాల్యూ = సెన్సార్ఈవెంట్.వాల్యూస్; // “లైట్_సెన్సర్” స్ట్రింగ్ను తిరిగి పొందండి, క్రొత్త విలువను చొప్పించి వినియోగదారుకు ప్రదర్శించండి // lightTextView.setText (getResources (). GetString (R.string.light_sensor, currentValue)); }
7. మీ శ్రోతలను నమోదు చేయవద్దు
సెన్సార్లు తక్కువ సమయంలో ఎక్కువ మొత్తంలో డేటాను ఉత్పత్తి చేయగలవు, కాబట్టి పరికర వనరులను సంరక్షించడంలో సహాయపడటానికి, మీ శ్రోతలు అవసరం లేనప్పుడు మీరు వాటిని నమోదు చేయాల్సిన అవసరం ఉంది.
మీ అనువర్తనం నేపథ్యంలో ఉన్నప్పుడు సెన్సార్ ఈవెంట్లను వినడం ఆపడానికి, మీ ప్రాజెక్ట్ యొక్క ఆన్స్టాప్ () జీవితచక్ర పద్ధతికి నమోదుకాని జాబితా () ను జోడించండి:
Ver ఓవర్రైడ్ రక్షిత శూన్యత ఆన్స్టాప్ () {super.onStop (); lightSensorManager.unregisterListener (ఈ); }
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 దిగుమతి; పబ్లిక్ క్లాస్ మెయిన్ యాక్టివిటీ AppCompatActivity ని విస్తరించింది // సెన్సార్ఈవెంట్లిస్టెనర్ ఇంటర్ఫేస్ను అమలు చేయండి // సెన్సార్ఈవెంట్లిస్టెనర్ను అమలు చేస్తుంది {// మీ వేరియబుల్స్ని సృష్టించండి // ప్రైవేట్ సెన్సార్ లైట్సెన్సర్; ప్రైవేట్ సెన్సార్ మేనేజర్ లైట్సెన్సర్ మేనేజర్; ప్రైవేట్ టెక్స్ట్ వ్యూ లైట్టెక్స్ట్ వ్యూ; Ver ఓవర్రైడ్ రక్షిత శూన్యత ఆన్క్రియేట్ (బండిల్ సేవ్ఇన్స్టాన్స్స్టేట్) {super.onCreate (saveInstanceState); setContentView (R.layout.activity_main); lightTextView = (టెక్స్ట్ వ్యూ) findViewById (R.id.lightTextView); // సెన్సార్ మేనేజర్ యొక్క ఉదాహరణను పొందండి // lightSensorManager = (సెన్సార్ మేనేజర్) getSystemService (సందర్భం. SENSOR_SERVICE); // లైట్ సెన్సార్ కోసం తనిఖీ చేయండి // lightSensor = lightSensorManager.getDefaultSensor (Sensor.TYPE_LIGHT); // లైట్ సెన్సార్ లేకపోతే, లోపం ప్రదర్శించండి // స్ట్రింగ్ సెన్సార్_ఎర్రర్ = getResources (). GetString (R.string.no_sensor); if (lightSensor == null) {lightTextView.setText (సెన్సార్_టెర్రర్); St ver ఓవర్రైడ్ రక్షిత శూన్యత ఆన్స్టార్ట్ () {super.onStart (); // ప్రస్తుత పరికరంలో సెన్సార్ అందుబాటులో ఉంటే ... // if (lightSensor! = Null) {//….అప్పుడు వినేవారిని నమోదు చేయండి // lightSensorManager.registerListener (ఇది, లైట్సెన్సర్, // మీరు ఎంత తరచుగా కావాలనుకుంటున్నారో పేర్కొనండి క్రొత్త డేటాను స్వీకరించండి // సెన్సార్ మేనేజర్. SENSOR_DELAY_NORMAL); St ver ver ఓవర్రైడ్ రక్షిత శూన్యత ఆన్స్టాప్ () {super.onStop (); // మీ వినేవారిని నమోదు చేయవద్దు // lightSensorManager.unregisterListener (ఇది); Sens సెన్సార్చాంగ్డ్ (సెన్సార్ఈవెంట్ సెన్సార్ఈవెంట్) పై పబ్లిక్ శూన్యతను అధిగమించండి {// సెన్సార్ యొక్క ప్రస్తుత విలువ // ఫ్లోట్ కరెంట్వాల్యూ = సెన్సార్ఈవెంట్.వాల్యూస్; // “light_sensor” స్ట్రింగ్ను తిరిగి పొందండి, క్రొత్త విలువను చొప్పించండి మరియు టెక్స్ట్ వ్యూని నవీకరించండి // lightTextView.setText (getResources (). GetString (R.string.light_sensor, currentValue)); Ver ver ఓవర్రైడ్ // సెన్సార్ యొక్క ఖచ్చితత్వం మారితే… .// పబ్లిక్ శూన్యత onAcuracyChanged (సెన్సార్ సెన్సార్, int i) TO // TO DO //}}
మీ పూర్తి చేసిన Android సెన్సార్ అనువర్తనాన్ని పరీక్షించండి
భౌతిక Android స్మార్ట్ఫోన్ లేదా టాబ్లెట్లో ఈ అనువర్తనాన్ని పరీక్షించడానికి:
- మీ పరికరంలో ప్రాజెక్ట్ను ఇన్స్టాల్ చేయండి (Android స్టూడియో టూల్బార్ నుండి “రన్> రన్” ఎంచుకోవడం ద్వారా).
- ఇది పరికరాల మధ్య మారుతూ ఉన్నప్పటికీ, లైట్ సెన్సార్ తరచుగా స్క్రీన్ కుడి ఎగువ భాగంలో ఉంటుంది. కాంతి స్థాయిలను మార్చటానికి, మీ పరికరాన్ని దగ్గరగా తరలించి, ఆపై కాంతి వనరు నుండి మరింత దూరంగా ఉంచండి. ప్రత్యామ్నాయంగా, మీరు కాంతిని నిరోధించడానికి, మీ చేతితో పరికరాన్ని కవర్ చేయడానికి ప్రయత్నించవచ్చు. అందుబాటులో ఉన్న కాంతి పరిమాణాన్ని బట్టి “లైట్ సెన్సార్” విలువ పెరుగుతుంది మరియు తగ్గుతుంది.
మీరు Android వర్చువల్ పరికరం (AVD) ఉపయోగిస్తుంటే, ఎమ్యులేటర్లో వర్చువల్ సెన్సార్ నియంత్రణల సమితి ఉంది, వీటిని మీరు వివిధ సెన్సార్ ఈవెంట్లను అనుకరించడానికి ఉపయోగించవచ్చు. ఎమ్యులేటర్ యొక్క “విస్తరించిన నియంత్రణలు” విండో ద్వారా మీరు ఈ వర్చువల్ సెన్సార్ నియంత్రణలను యాక్సెస్ చేస్తారు:
- మీ AVD లో అప్లికేషన్ను ఇన్స్టాల్ చేయండి.
- AVD తో పాటు, మీరు బటన్ల స్ట్రిప్ చూస్తారు. మూడు-చుక్కల “మరిన్ని” బటన్ను కనుగొనండి (కర్సర్ కింది స్క్రీన్షాట్లో ఉంచబడిన చోట) మరియు దానిని క్లిక్ చేయండి. ఇది “విస్తరించిన నియంత్రణలు” విండోను ప్రారంభిస్తుంది.
- ఎడమ చేతి మెనులో, “వర్చువల్ సెన్సార్లు” ఎంచుకోండి.
- “అదనపు సెన్సార్లు” టాబ్ని ఎంచుకోండి. ఈ ట్యాబ్లో మీరు వివిధ స్థానం మరియు పర్యావరణ సెన్సార్ సంఘటనలను అనుకరించడానికి ఉపయోగించే వివిధ స్లైడర్లను కలిగి ఉన్నారు.
- అనుకరణ కాంతి స్థాయిలను మార్చడానికి “లైట్ (లక్స్)” స్లయిడర్ను కనుగొని ఎడమ మరియు కుడి వైపుకు లాగండి. మీ అప్లికేషన్ ఈ మారుతున్న విలువలను నిజ సమయంలో ప్రదర్శిస్తుంది.
మీరు పూర్తి చేసిన ప్రాజెక్ట్ను గిట్హబ్ నుండి డౌన్లోడ్ చేసుకోవచ్చు.
Android యొక్క సామీప్య సెన్సార్లతో దూరాన్ని కొలవడం
పర్యావరణ సెన్సార్ నుండి సమాచారాన్ని ఎలా పొందాలో ఇప్పుడు మేము చూశాము, మీరు ఈ జ్ఞానాన్ని ఎలా వర్తింపజేస్తారో చూద్దాం స్థానం నమోదు చేయు పరికరము.
ఈ విభాగంలో, మీ స్మార్ట్ఫోన్ లేదా టాబ్లెట్ మరియు ఇతర వస్తువుల మధ్య దూరాన్ని పర్యవేక్షించడానికి మేము పరికరం యొక్క సామీప్య సెన్సార్ను ఉపయోగిస్తాము. మీ అనువర్తనానికి ఏ విధమైన వాయిస్ కార్యాచరణ ఉంటే, అప్పుడు వినియోగదారు చెవికి స్మార్ట్ఫోన్ ఎప్పుడు ఉందో తెలుసుకోవడానికి సామీప్య సెన్సార్ మీకు సహాయపడుతుంది, ఉదాహరణకు వారు టెలిఫోన్ సంభాషణలో ఉన్నప్పుడు. టచ్ ఈవెంట్లను నిలిపివేయడానికి మీరు ఈ సమాచారాన్ని ఉపయోగించవచ్చు, కాబట్టి వినియోగదారు అనుకోకుండా వేలాడదీయరు లేదా ఇతర అవాంఛిత సంఘటనలను మధ్య సంభాషణను ప్రేరేపించలేరు.
వినియోగదారు ఇంటర్ఫేస్ను సృష్టిస్తోంది
నేను సాన్నిధ్య డేటాను తెరపై ప్రదర్శించబోతున్నాను, కాబట్టి మీరు దీన్ని నిజ సమయంలో నవీకరించడాన్ని చూడవచ్చు. విషయాలు సరళంగా ఉంచడంలో సహాయపడటానికి, మా మునుపటి అనువర్తనం నుండి చాలా లేఅవుట్ను తిరిగి ఉపయోగించుకుందాం:
తరువాత, మీ strings.xml ఫైల్ను తెరిచి “సామీప్యత_సెన్సర్” స్ట్రింగ్ను సృష్టించండి. మరోసారి, ఈ స్ట్రింగ్లో ప్లేస్హోల్డర్ ఉండాలి, ఇది సామీప్య సెన్సార్ నుండి సేకరించిన డేటా ద్వారా చివరికి జనాభా అవుతుంది:
సామీప్య సెన్సార్ నుండి డేటాను పొందడం
లైట్ సెన్సార్ మాదిరిగానే, Android యొక్క సాన్నిధ్య సెన్సార్ ఒకే డేటా విలువను అందిస్తుంది, అంటే మన మునుపటి అనువర్తనం నుండి చాలా కోడ్ను తిరిగి ఉపయోగించుకోవచ్చు. ఏదేమైనా, కొన్ని ప్రధాన తేడాలు ఉన్నాయి, ఇంకా కొన్ని పేరు-సంబంధిత మార్పులు ఈ కోడ్ను అనుసరించడం సులభం చేస్తాయి:
- సెన్సార్ మేనేజర్ యొక్క ఉదాహరణను సృష్టించండి, ఈ సమయంలో నేను “సామీప్యత సెన్సార్ మేనేజర్” అని పేరు పెట్టబోతున్నాను.
- “సామీప్యత సెన్సార్ మేనేజర్” యొక్క ఉదాహరణను పొందండి.
- “సామీప్యత టెక్స్ట్ వ్యూ” కు సూచనను సృష్టించండి.
- GetDefaultSensor () పద్ధతిని కాల్ చేసి, దానిని 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 దిగుమతి; పబ్లిక్ క్లాస్ మెయిన్ఆక్టివిటీ AppCompatActivity ని విస్తరించింది // సెన్సార్ఈవెంట్లిస్టెనర్ ఇంటర్ఫేస్ను అమలు చేయండి // సెన్సార్ఈవెంట్లిస్టెనర్ను అమలు చేస్తుంది {// మీ వేరియబుల్స్ని సృష్టించండి // ప్రైవేట్ సెన్సార్ సామీప్యత సెన్సార్; ప్రైవేట్ సెన్సార్ మేనేజర్ సామీప్యత సెన్సార్ మేనేజర్; ప్రైవేట్ టెక్స్ట్ వ్యూ సామీప్యత టెక్స్ట్ వ్యూ; Ver ఓవర్రైడ్ రక్షిత శూన్యత ఆన్క్రియేట్ (బండిల్ సేవ్ఇన్స్టాన్స్స్టేట్) {super.onCreate (saveInstanceState); setContentView (R.layout.activity_main); proximityTextView = (టెక్స్ట్ వ్యూ) findViewById (R.id.proximityTextView); // సెన్సార్ మేనేజర్ యొక్క ఉదాహరణను పొందండి // సామీప్యత సెన్సార్ మేనేజర్ = (సెన్సార్ మేనేజర్) getSystemService (సందర్భం. SENSOR_SERVICE); // సామీప్య సెన్సార్ కోసం తనిఖీ చేయండి // సామీప్యత సెన్సార్ = సామీప్యత సెన్సార్ మేనేజర్.జెట్ డీఫాల్ట్సెన్సర్ (సెన్సార్. TYPE_PROXIMITY); // సామీప్య సెన్సార్ లేకపోతే, లోపం ప్రదర్శించండి // స్ట్రింగ్ సెన్సార్_రర్ = getResources (). GetString (R.string.no_sensor); if (proximitySensor == null) {proximityTextView.setText (సెన్సార్_టెర్రర్); St ver ఓవర్రైడ్ రక్షిత శూన్యత ఆన్స్టార్ట్ () {super.onStart (); // ప్రస్తుత పరికరంలో సెన్సార్ అందుబాటులో ఉంటే ... // if (సామీప్యత సెన్సార్! క్రొత్త డేటాను స్వీకరించండి // సెన్సార్ మేనేజర్. SENSOR_DELAY_NORMAL); St ver ver ఓవర్రైడ్ రక్షిత శూన్యత ఆన్స్టాప్ () {super.onStop (); // సిస్టమ్ వనరులను కాపాడటానికి మీ వినేవారిని నమోదు చేయవద్దు // సామీప్యత సెన్సార్ మేనేజర్.అన్రిజిస్టర్లిస్టెనర్ (ఇది); Sens సెన్సార్చాంగ్డ్ (సెన్సార్ఈవెంట్ సెన్సార్ఈవెంట్) పై పబ్లిక్ శూన్యతను అధిగమించండి {// సెన్సార్ యొక్క ప్రస్తుత విలువ // ఫ్లోట్ కరెంట్వాల్యూ = సెన్సార్ఈవెంట్.వాల్యూస్; // “సామీప్యత_సెన్సర్” స్ట్రింగ్ను తిరిగి పొందండి, క్రొత్త విలువను చొప్పించండి మరియు టెక్స్ట్ వ్యూని నవీకరించండి // సామీప్యత టెక్స్ట్ వ్యూ.సెట్టెక్స్ట్ (getResources (). GetString (R.string.proximity_sensor, currentValue)); Ver ver ఓవర్రైడ్ // సెన్సార్ యొక్క ఖచ్చితత్వం మారితే… .// పబ్లిక్ శూన్యత onAcuracyChanged (సెన్సార్ సెన్సార్, int i) {//...TO DO //}}
పరీక్ష: వినియోగదారు వారి పరికరానికి ఎంత దగ్గరగా ఉన్నారు?
ఈ అనువర్తనాన్ని భౌతిక Android స్మార్ట్ఫోన్ లేదా టాబ్లెట్లో పరీక్షించడానికి, మీ పరికరంలో అనువర్తనాన్ని ఇన్స్టాల్ చేసి, ఆపై మీ చేతిని స్క్రీన్ వైపుకు తరలించడం ద్వారా ప్రయోగం చేసి, ఆపై దాన్ని మళ్లీ తరలించడం ద్వారా ప్రయోగం చేయండి. “సామీప్య సెన్సార్” విలువ మీ కదలికలను రికార్డ్ చేయాలి.
పరికరాల మధ్య సామీప్య సెన్సార్లు మారవచ్చని తెలుసుకోండి. కొన్ని పరికరాలు రెండు సామీప్య విలువలను మాత్రమే ప్రదర్శిస్తాయి - ఒకటి “సమీపంలో” సూచించడానికి మరియు మరొకటి “దూరం” అని సూచించడానికి - కాబట్టి మీరు మీ భౌతిక Android పరికరంలో చాలా వైవిధ్యాలను చూడకపోతే ఆశ్చర్యపోకండి.
ఈ అనువర్తనాన్ని ఎమ్యులేటర్లో పరీక్షించడానికి:
- మీ అప్లికేషన్ను AVD లో ఇన్స్టాల్ చేయండి.
- మూడు-చుక్కల “మరిన్ని” బటన్ను కనుగొని, దానికి క్లిక్ చేయండి, ఇది “విస్తరించిన నియంత్రణలు” విండోను ప్రారంభిస్తుంది.
- విండో యొక్క ఎడమ చేతి మెనులో, “వర్చువల్ సెన్సార్లు” ఎంచుకోండి.
- “అదనపు సెన్సార్లు” టాబ్ని ఎంచుకోండి.
- “సామీప్యత” స్లయిడర్ను కనుగొని, పరికరానికి దగ్గరగా కదిలే వస్తువును అనుకరించడానికి ఎడమ మరియు కుడి వైపుకు లాగండి, ఆపై మరింత దూరంగా. మీరు స్లైడర్ను మార్చినప్పుడు “సామీప్యత సెన్సార్” విలువలు మారాలి.
మీరు పూర్తి చేసిన ప్రాజెక్ట్ను గిట్హబ్ నుండి డౌన్లోడ్ చేసుకోవచ్చు.
మోషన్ సెన్సార్లు: మల్టీ డైమెన్షనల్ అర్రేలను ప్రాసెస్ చేస్తోంది
ఈ సమయం వరకు, మేము ఒక ఐటెమ్ డేటాను సరఫరా చేసే సెన్సార్లపై దృష్టి కేంద్రీకరించాము, కాని ప్రతి సెన్సార్ఈవెంట్ కోసం బహుమితీయ శ్రేణులను అందించే కొన్ని సెన్సార్లు ఉన్నాయి. ఈ మల్టీ డైమెన్షనల్ సెన్సార్లలో మోషన్ సెన్సార్లు ఉన్నాయి, వీటిని మేము ఈ చివరి విభాగంలో దృష్టి పెడతాము.
మోషన్ సెన్సార్లు మీకు సహాయపడతాయి:
- వినియోగదారు ఇన్పుట్ యొక్క ప్రత్యామ్నాయ పద్ధతిని అందించండి. ఉదాహరణకు, మీరు మొబైల్ గేమ్ను అభివృద్ధి చేస్తుంటే, వినియోగదారు వారి పరికరాన్ని టిల్ట్ చేయడం ద్వారా వారి పాత్రను తెరపైకి తరలించవచ్చు.
- వినియోగదారు కార్యాచరణను తెలియజేయండి. మీరు కార్యాచరణ-ట్రాకింగ్ అనువర్తనాన్ని సృష్టించినట్లయితే, వినియోగదారు కారులో ప్రయాణిస్తున్నారా, జాగింగ్ చేస్తున్నారా లేదా వారి డెస్క్ వద్ద కూర్చున్నారా అని కొలవడానికి మోషన్ సెన్సార్లు మీకు సహాయపడతాయి.
- ధోరణిని మరింత ఖచ్చితంగా నిర్ణయించండి.పరికరం యొక్క మోషన్ సెన్సార్ల నుండి కోఆర్డినేట్లను సేకరించడం సాధ్యమవుతుంది, ఆపై పరికరం యొక్క ప్రస్తుత ధోరణిపై అత్యంత ఖచ్చితమైన అంతర్దృష్టిని పొందడానికి భూమి యొక్క సమన్వయ వ్యవస్థ ఆధారంగా వాటిని అనువదించవచ్చు.
ఈ చివరి విభాగంలో, మేము భ్రమణ వెక్టర్ సెన్సార్ (TYPE_ROTATION_VECTOR) ను ఉపయోగిస్తాము. కాంతి మరియు సామీప్య సెన్సార్ల మాదిరిగా కాకుండా, ఇది పరికరం యొక్క యాక్సిలెరోమీటర్, మాగ్నెటోమీటర్ మరియు గైరోస్కోప్ సెన్సార్ల నుండి డేటాను సమకూర్చే సాఫ్ట్వేర్ సెన్సార్. ఈ సెన్సార్తో పనిచేయడానికి మీకు గణిత మార్పిడులు మరియు పరివర్తనాలు చేయాల్సిన అవసరం ఉన్నప్పటికీ, ఇది పరికరం గురించి చాలా ఖచ్చితమైన సమాచారాన్ని కూడా మీకు అందిస్తుంది.
కొలవడానికి భ్రమణ వెక్టర్ సెన్సార్ను ఉపయోగించే అనువర్తనాన్ని మేము సృష్టిస్తాము:
- పిచ్. ఇది పరికరం యొక్క పై నుండి క్రిందికి వంపు.
- రోల్. ఇది పరికరం యొక్క ఎడమ నుండి కుడికి వంపు.
రియల్ టైమ్ పిచ్ మరియు రోల్ డేటాను ప్రదర్శిస్తుంది
మేము రెండు కొలమానాలను కొలుస్తున్నందున, మేము రెండు టెక్స్ట్ వ్యూస్ మరియు రెండు సంబంధిత స్ట్రింగ్ వనరులను సృష్టించాలి:
String.xml ఫైల్ను తెరిచి, కింది వాటిని జోడించండి:
మీ అనువర్తనంలో భ్రమణ వెక్టర్ సెన్సార్ను ఉపయోగించడం
మేము మా మునుపటి అనువర్తనాల నుండి కొన్ని కోడ్లను తిరిగి ఉపయోగిస్తాము, కాబట్టి భ్రమణ వెక్టర్ సెన్సార్తో కమ్యూనికేట్ చేసే ప్రాంతాలపై దృష్టి పెడదాం, మనం ఇంతకు ముందు చూసిన వాటికి భిన్నంగా ఉంటుంది.
1. TYPE_ROTATION_VECTOR ని ఉపయోగించండి
మేము భ్రమణ వెక్టర్ సెన్సార్తో పని చేస్తున్నందున, మేము getDefaultSensor () పద్ధతిని పిలవాలి, ఆపై దానిని TYPE_ROTATION_VECTOR స్థిరంగా పంపాలి:
positionSensorManager.getDefaultSensor (Sensor.TYPE_ROTATION_VECTOR);
2. సెన్సార్ డేటాను అనువదించండి
మునుపటి కాంతి మరియు సామీప్య సెన్సార్ల మాదిరిగా కాకుండా, మోషన్ సెన్సార్లు ప్రతి సెన్సార్ఈవెంట్ కోసం సెన్సార్ విలువల యొక్క బహుమితీయ శ్రేణులను తిరిగి ఇస్తాయి. ఈ విలువలు ప్రామాణిక “X, Y, Z” కోఆర్డినేట్ సిస్టమ్ను ఉపయోగించి ఫార్మాట్ చేయబడతాయి, ఇది పరికరం దాని డిఫాల్ట్, “సహజ” ధోరణిలో ఉన్నప్పుడు లెక్కించబడుతుంది.
పరికరం యొక్క ప్రస్తుత ధోరణికి సరిపోయేలా Android ఈ X, Y మరియు Z కోఆర్డినేట్లను మార్చదు, కాబట్టి పరికరం పోర్ట్రెయిట్ లేదా ల్యాండ్స్కేప్ మోడ్లో ఉన్నా “X” అక్షం ఒకే విధంగా ఉంటుంది. భ్రమణ వెక్టర్ సెన్సార్ను ఉపయోగిస్తున్నప్పుడు, మీరు పరికరం యొక్క ప్రస్తుత భ్రమణానికి సరిపోయేలా ఇన్కమింగ్ డేటాను మార్చాల్సి ఉంటుంది.
పోర్ట్రెయిట్ చాలా స్మార్ట్ఫోన్ల యొక్క డిఫాల్ట్ ధోరణి, అయితే ఇది అలా ఉంటుందని మీరు అనుకోకూడదు అన్ని Android పరికరాలు, ముఖ్యంగా టాబ్లెట్లు. ఈ వ్యాసంలో, సెన్సార్ డేటాను దాని అసలు నుండి అనువదించడానికి మేము భ్రమణ మాతృకను ఉపయోగిస్తాము, పరికరం సమన్వయ వ్యవస్థ, కు భూమి యొక్క కోఆర్డినేట్ సిస్టమ్, ఇది పరికరం యొక్క కదలికను మరియు భూమికి సంబంధించి స్థానాన్ని సూచిస్తుంది. అవసరమైతే, మేము పరికరం యొక్క ప్రస్తుత ధోరణి ఆధారంగా సెన్సార్ డేటాను రీమాప్ చేయవచ్చు.
మొదట, పరికర సమన్వయ వ్యవస్థ ప్రామాణిక 3-అక్షం X, Y, Z కోఆర్డినేట్ వ్యవస్థ, ఇక్కడ మూడు అక్షాలలో ప్రతి బిందువు 3 డి వెక్టర్ ద్వారా సూచించబడుతుంది. దీని అర్థం మనం 9 ఫ్లోట్ విలువల శ్రేణిని సృష్టించాలి:
ఫ్లోట్ రొటేషన్ మాట్రిక్స్ = కొత్త ఫ్లోట్;
అప్పుడు మేము ఈ శ్రేణిని getRotationMatrix () పద్ధతికి పంపవచ్చు:
SensorManager.getRotationMatrixFromVector (రొటేషన్ మ్యాట్రిక్స్, వెక్టర్స్); int worldAxisX = సెన్సార్ మేనేజర్. AXIS_X; int worldAxisZ = సెన్సార్ మేనేజర్. AXIS_Z;
తదుపరి దశ, పరికరం యొక్క ప్రస్తుత ధోరణి ఆధారంగా సెన్సార్ డేటాను రీమాప్ చేయడానికి సెన్సార్ మేనేజర్.రేమాప్ కోఆర్డినేట్ సిస్టం () పద్ధతిని ఉపయోగిస్తోంది.
SensorManager.remapCoordinateSystem () పద్ధతి క్రింది వాదనలను తీసుకుంటుంది:
- అసలు భ్రమణ మాతృక.
- మీరు రీమాప్ చేయదలిచిన గొడ్డలి.
- ఈ క్రొత్త డేటాతో మీరు జనాభా ఉన్న శ్రేణి.
నా అనువర్తనంలో నేను ఉపయోగిస్తున్న కోడ్ ఇక్కడ ఉంది:
ఫ్లోట్ సర్దుబాటు చేసిన రోటేషన్ మ్యాట్రిక్స్ = కొత్త ఫ్లోట్; SensorManager.remapCoordinateSystem (rotationMatrix, worldAxisX, worldAxisZ, సర్దుబాటు చేసిన రోటేషన్ మ్యాట్రిక్స్);
చివరగా, మేము SensorManager.getOrientation అని పిలుస్తాము మరియు సర్దుబాటు చేసిన RotationMatrix ని ఉపయోగించమని చెబుతాము:
SensorManager.getOrientation (సర్దుబాటు చేసిన రోటేషన్ మ్యాట్రిక్స్, ధోరణి);
3. ప్లేస్హోల్డర్ తీగలను నవీకరించండి
మాకు రెండు సెట్ల డేటా (పిచ్ మరియు రోల్) ఉన్నందున, మేము రెండు వేర్వేరు ప్లేస్హోల్డర్ తీగలను తిరిగి పొందాలి, వాటిని సరైన విలువలతో జనసాంద్రత చేసి, ఆపై సంబంధిత టెక్స్ట్ వ్యూని నవీకరించాలి:
పిచ్టెక్స్ట్ వ్యూ.సెట్టెక్స్ట్ (getResources (). getString (R.string.pitch_sensor, పిచ్)); rollTextView.setText (getResources (). getString (R.string.roll_sensor, roll));
బహుళ సెన్సార్ డేటాను ప్రదర్శిస్తుంది: పూర్తయిన కోడ్
పై దశలను చేసిన తర్వాత, మీ మెయిన్ యాక్టివిటీ ఇలా ఉండాలి:
android.app.Activity దిగుమతి; android.os.Bundle దిగుమతి; android.hardware.Sensor దిగుమతి; android.hardware.SensorEvent ను దిగుమతి చేయండి; android.hardware.SensorEventListener ను దిగుమతి చేయండి; android.hardware.SensorManager ను దిగుమతి చేయండి; android.widget.TextView దిగుమతి; పబ్లిక్ క్లాస్ మెయిన్ఆక్టివిటీ కార్యాచరణను విస్తరిస్తుంది సెన్సార్ఈవెంట్లిస్టెనర్ {ప్రైవేట్ సెన్సార్ మేనేజర్ మోషన్ సెన్సార్ మేనేజర్; ప్రైవేట్ సెన్సార్ మోషన్ సెన్సార్; ప్రైవేట్ టెక్స్ట్ వ్యూ పిచ్ టెక్స్ట్ వ్యూ; ప్రైవేట్ టెక్స్ట్ వ్యూ రోల్టెక్స్ట్ వ్యూ; ప్రైవేట్ స్టాటిక్ ఫైనల్ Int SENSOR_DELAY = 500 * 1000; ప్రైవేట్ స్టాటిక్ ఫైనల్ Int FROM_RADS_TO_DEGS = -57; Ver ఓవర్రైడ్ రక్షిత శూన్యత ఆన్క్రియేట్ (బండిల్ సేవ్ఇన్స్టాన్స్స్టేట్) {super.onCreate (saveInstanceState); setContentView (R.layout.activity_main); పిచ్టెక్స్ట్ వ్యూ = (టెక్స్ట్ వ్యూ) findViewById (R.id.pitchTextView); rollTextView = (టెక్స్ట్ వ్యూ) findViewById (R.id.rollTextView); ప్రయత్నించండి {motionSensorManager = (సెన్సార్ మేనేజర్) getSystemService (కార్యాచరణ. SENSOR_SERVICE); motionSensor = motionSensorManager.getDefaultSensor (సెన్సార్. TYPE_ROTATION_VECTOR); motionSensorManager.registerListener (ఇది, మోషన్ సెన్సార్, SENSOR_DELAY); } క్యాచ్ (మినహాయింపు ఇ) {పిచ్ టెక్స్ట్ వ్యూ.సెట్టెక్స్ట్ (R.string.no_sensor); rollTextView.setText (R.string.no_sensor); Cc} ac అక్రూసిచాంగెడ్ (సెన్సార్ సెన్సార్, పూర్ణాంక ఖచ్చితత్వం) పై పబ్లిక్ శూన్యతను ఓవర్రైడ్ చేయండి // చేయటానికి // @ సెన్సార్చాంగ్డ్ (సెన్సార్ఈవెంట్ ఈవెంట్) {if (event.sensor == motionSensor) {if (event.sensor == motionSensor) {if (event.sensor == motionSensor) v} ప్రైవేట్ శూన్య నవీకరణ (ఫ్లోట్ వెక్టర్స్) {// భ్రమణ మాతృకను లెక్కించండి // ఫ్లోట్ రొటేషన్ మాట్రిక్స్ = కొత్త ఫ్లోట్; SensorManager.getRotationMatrixFromVector (రొటేషన్ మ్యాట్రిక్స్, వెక్టర్స్); int worldAxisX = సెన్సార్ మేనేజర్. AXIS_X; int worldAxisZ = సెన్సార్ మేనేజర్. AXIS_Z; // కార్యాచరణ యొక్క ప్రస్తుత ధోరణి ఆధారంగా మాతృకను రీమాప్ చేయండి // ఫ్లోట్ సర్దుబాటు చేసిన రోటేషన్ మ్యాట్రిక్స్ = కొత్త ఫ్లోట్; SensorManager.remapCoordinateSystem (rotationMatrix, worldAxisX, worldAxisZ, సర్దుబాటు చేసిన రోటేషన్ మ్యాట్రిక్స్); // పరికరాల ధోరణిని లెక్కించండి // ఫ్లోట్ ధోరణి = కొత్త ఫ్లోట్; // getOrientation () పద్ధతికి ఫ్లోట్ విలువల శ్రేణిని సరఫరా చేయండి // SensorManager.getOrientation (సర్దుబాటు చేసిన రోటేషన్ మ్యాట్రిక్స్, ధోరణి); ఫ్లోట్ పిచ్ = ధోరణి * FROM_RADS_TO_DEGS; ఫ్లోట్ రోల్ = ధోరణి * FROM_RADS_TO_DEGS; // పిచ్ మరియు రోల్ విలువలతో టెక్స్ట్ వ్యూలను నవీకరించండి // పిచ్టెక్స్ట్ వ్యూ.సెట్టెక్స్ట్ (getResources (). GetString (R.string.pitch_sensor, పిచ్)); rollTextView.setText (getResources (). getString (R.string.roll_sensor, roll)); }}
మీరు పూర్తి చేసిన ప్రాజెక్ట్ను గిట్హబ్ నుండి డౌన్లోడ్ చేసుకోవచ్చు.
మా చివరి Android సెన్సార్ అనువర్తనాన్ని పరీక్షిస్తోంది
ఈ భ్రమణ వెక్టర్ భౌతిక సెన్సార్ అనువర్తనాన్ని భౌతిక Android స్మార్ట్ఫోన్ లేదా టాబ్లెట్లో పరీక్షించడానికి:
- మీ పరికరంలో అనువర్తనాన్ని ఇన్స్టాల్ చేయండి.
- మీ స్మార్ట్ఫోన్ లేదా టాబ్లెట్ను చదునైన ఉపరితలంపై ఉంచండి. మోషన్ సెన్సార్లు చాలా సున్నితమైనవని గమనించండి, కాబట్టి కదలికలేని పరికరం పిచ్ మరియు రోల్ విలువలలో హెచ్చుతగ్గులను నివేదించడం అసాధారణం కాదు.
- పిచ్ను పరీక్షించడానికి, మీ పరికరం దిగువ నుండి ఎత్తండి, తద్వారా ఇది మీ నుండి దూరంగా ఉంటుంది. పిచ్ విలువ ఒక్కసారిగా మారాలి.
- రోల్ను పరీక్షించడానికి, మీ పరికరం యొక్క ఎడమ వైపు ఎత్తడానికి ప్రయత్నించండి, కాబట్టి ఇది ఎడమ వైపుకు వంగి ఉంటుంది - ఆ రోల్ విలువపై నిఘా ఉంచండి!
మీరు మీ ప్రాజెక్ట్ను ఎమ్యులేటర్లో పరీక్షిస్తుంటే:
- మీ AVD లో అప్లికేషన్ను ఇన్స్టాల్ చేయండి.
- “విస్తరించిన నియంత్రణలు” విండోను ప్రారంభించే “మరిన్ని” ఎంచుకోండి.
- ఎడమ చేతి మెనులో, “వర్చువల్ సెన్సార్లు” ఎంచుకోండి.
- “యాక్సిలెరోమీటర్” టాబ్ ఎంచుకోబడిందని నిర్ధారించుకోండి. ఈ టాబ్ పరికరం యొక్క స్థానం మరియు ధోరణిలో మార్పులను అనుకరించగల నియంత్రణలను కలిగి ఉంటుంది.
- మీ అప్లికేషన్ యొక్క “రోల్ సెన్సార్ను వారు ఎలా ప్రభావితం చేస్తారో చూడటానికి వివిధ స్లైడర్లతో (తిప్పండి: Z- రాట్, X- రాట్, Y- రాట్; మరియు తరలించు: X, Y, మరియు Z) మరియు వివిధ“ పరికర భ్రమణ ”బటన్లతో ప్రయోగాలు చేయడానికి ప్రయత్నించండి. ”మరియు“ పిచ్ సెన్సార్ ”విలువలు.
చుట్టి వేయు
ఈ వ్యాసంలో, ఆండ్రాయిడ్ సెన్సార్ల యొక్క మూడు ప్రధాన వర్గాల నుండి డేటాను ఎలా తిరిగి పొందాలో చూశాము: పర్యావరణం, స్థానం మరియు కదలిక మరియు నిజ సమయంలో ఈ డేటాను ఎలా పర్యవేక్షించాలో.
ఆసక్తికరమైన లేదా ప్రత్యేకమైన మార్గాల్లో సెన్సార్లను ఉపయోగించే ఏదైనా Android అనువర్తనాలను మీరు చూశారా? దిగువ వ్యాఖ్యలలో మాకు తెలియజేయండి!