বেশিরভাগ অ্যান্ড্রয়েড-চালিত ডিভাইসে অন্তর্নির্মিত সেন্সর থাকে যা গতি, ওরিয়েন্টেশন এবং বিভিন্ন পরিবেশগত অবস্থা পরিমাপ করে। এই সেন্সরগুলি উচ্চ নির্ভুলতা এবং নির্ভুলতার সাথে কাঁচা ডেটা সরবরাহ করতে সক্ষম এবং আপনি যদি ত্রিমাত্রিক ডিভাইসের গতিবিধি বা অবস্থান পর্যবেক্ষণ করতে চান, অথবা আপনি কোনও ডিভাইসের কাছাকাছি পরিবেশের পরিবর্তনগুলি পর্যবেক্ষণ করতে চান তবে এটি কার্যকর। উদাহরণস্বরূপ, একটি গেম একটি ডিভাইসের মাধ্যাকর্ষণ সেন্সর থেকে রিডিং ট্র্যাক করতে পারে যাতে ব্যবহারকারীর জটিল অঙ্গভঙ্গি এবং গতি, যেমন টিল্ট, ঝাঁকুনি, ঘূর্ণন বা সুইং অনুমান করা যায়। একইভাবে, একটি আবহাওয়া অ্যাপ্লিকেশন শিশিরবিন্দু গণনা এবং রিপোর্ট করার জন্য একটি ডিভাইসের তাপমাত্রা সেন্সর এবং আর্দ্রতা সেন্সর ব্যবহার করতে পারে, অথবা একটি ভ্রমণ অ্যাপ্লিকেশন একটি কম্পাস বিয়ারিং রিপোর্ট করার জন্য ভূ-চৌম্বকীয় ক্ষেত্র সেন্সর এবং অ্যাক্সিলোমিটার ব্যবহার করতে পারে।
নিম্নলিখিত সম্পর্কিত সম্পদগুলি দেখুন:
অ্যান্ড্রয়েড প্ল্যাটফর্ম তিনটি বিস্তৃত শ্রেণীর সেন্সর সমর্থন করে:
-  মোশন সেন্সরএই সেন্সরগুলি তিনটি অক্ষ বরাবর ত্বরণ বল এবং ঘূর্ণন বল পরিমাপ করে। এই বিভাগে অ্যাক্সিলোমিটার, মাধ্যাকর্ষণ সেন্সর, জাইরোস্কোপ এবং ঘূর্ণন ভেক্টর সেন্সর অন্তর্ভুক্ত রয়েছে। 
-  পরিবেশগত সেন্সরএই সেন্সরগুলি বিভিন্ন পরিবেশগত পরামিতি পরিমাপ করে, যেমন পরিবেষ্টিত বায়ুর তাপমাত্রা এবং চাপ, আলোকসজ্জা এবং আর্দ্রতা। এই বিভাগে ব্যারোমিটার, ফটোমিটার এবং থার্মোমিটার অন্তর্ভুক্ত রয়েছে। 
-  অবস্থান সেন্সরএই সেন্সরগুলি একটি ডিভাইসের ভৌত অবস্থান পরিমাপ করে। এই বিভাগে ওরিয়েন্টেশন সেন্সর এবং ম্যাগনেটোমিটার অন্তর্ভুক্ত রয়েছে। 
আপনি ডিভাইসে উপলব্ধ সেন্সরগুলি অ্যাক্সেস করতে পারেন এবং অ্যান্ড্রয়েড সেন্সর ফ্রেমওয়ার্ক ব্যবহার করে কাঁচা সেন্সর ডেটা অর্জন করতে পারেন। সেন্সর ফ্রেমওয়ার্কটি বিভিন্ন ক্লাস এবং ইন্টারফেস প্রদান করে যা আপনাকে সেন্সর-সম্পর্কিত বিভিন্ন ধরণের কাজ সম্পাদন করতে সহায়তা করে। উদাহরণস্বরূপ, আপনি নিম্নলিখিতগুলি করার জন্য সেন্সর ফ্রেমওয়ার্ক ব্যবহার করতে পারেন:
- কোন ডিভাইসে কোন সেন্সর পাওয়া যায় তা নির্ধারণ করুন।
- একটি পৃথক সেন্সরের ক্ষমতা নির্ধারণ করুন, যেমন এর সর্বোচ্চ পরিসর, প্রস্তুতকারক, পাওয়ার প্রয়োজনীয়তা এবং রেজোলিউশন।
- কাঁচা সেন্সর ডেটা অর্জন করুন এবং সর্বনিম্ন কত হারে সেন্সর ডেটা অর্জন করবেন তা নির্ধারণ করুন।
- সেন্সর পরিবর্তন পর্যবেক্ষণকারী সেন্সর ইভেন্ট লিসেনারের নিবন্ধন এবং নিবন্ধনমুক্ত করুন।
এই বিষয়টি অ্যান্ড্রয়েড প্ল্যাটফর্মে উপলব্ধ সেন্সরগুলির একটি সারসংক্ষেপ প্রদান করে। এটি সেন্সর কাঠামোর একটি ভূমিকাও প্রদান করে।
সেন্সরের ভূমিকা
অ্যান্ড্রয়েড সেন্সর ফ্রেমওয়ার্ক আপনাকে অনেক ধরণের সেন্সর অ্যাক্সেস করতে দেয়। এই সেন্সরগুলির মধ্যে কিছু হার্ডওয়্যার-ভিত্তিক এবং কিছু সফ্টওয়্যার-ভিত্তিক। হার্ডওয়্যার-ভিত্তিক সেন্সর হল একটি হ্যান্ডসেট বা ট্যাবলেট ডিভাইসে তৈরি ভৌত উপাদান। তারা ত্বরণ, ভূ-চৌম্বকীয় ক্ষেত্র শক্তি বা কৌণিক পরিবর্তনের মতো নির্দিষ্ট পরিবেশগত বৈশিষ্ট্যগুলি সরাসরি পরিমাপ করে তাদের ডেটা সংগ্রহ করে। সফ্টওয়্যার-ভিত্তিক সেন্সরগুলি ভৌত ডিভাইস নয়, যদিও তারা হার্ডওয়্যার-ভিত্তিক সেন্সরগুলির অনুকরণ করে। সফ্টওয়্যার-ভিত্তিক সেন্সরগুলি এক বা একাধিক হার্ডওয়্যার-ভিত্তিক সেন্সর থেকে তাদের ডেটা সংগ্রহ করে এবং কখনও কখনও ভার্চুয়াল সেন্সর বা সিন্থেটিক সেন্সর বলা হয়। রৈখিক ত্বরণ সেন্সর এবং মাধ্যাকর্ষণ সেন্সর হল সফ্টওয়্যার-ভিত্তিক সেন্সরগুলির উদাহরণ। টেবিল 1 অ্যান্ড্রয়েড প্ল্যাটফর্ম দ্বারা সমর্থিত সেন্সরগুলির সংক্ষিপ্তসার করে।
খুব কম অ্যান্ড্রয়েডচালিত ডিভাইসেই সব ধরণের সেন্সর থাকে। উদাহরণস্বরূপ, বেশিরভাগ হ্যান্ডসেট ডিভাইস এবং ট্যাবলেটে একটি অ্যাক্সিলোমিটার এবং একটি ম্যাগনেটোমিটার থাকে, কিন্তু খুব কম ডিভাইসেই ব্যারোমিটার বা থার্মোমিটার থাকে। এছাড়াও, একটি ডিভাইসে একই ধরণের একাধিক সেন্সর থাকতে পারে। উদাহরণস্বরূপ, একটি ডিভাইসে দুটি মাধ্যাকর্ষণ সেন্সর থাকতে পারে, প্রতিটিরই আলাদা আলাদা রেঞ্জ থাকে।
সারণী ১। অ্যান্ড্রয়েড প্ল্যাটফর্ম দ্বারা সমর্থিত সেন্সরের ধরণ।
| সেন্সর | আদর্শ | বিবরণ | সাধারণ ব্যবহার | 
|---|---|---|---|
| TYPE_ACCELEROMETER | হার্ডওয়্যার | তিনটি ভৌত অক্ষের (x, y, এবং z) উপর একটি ডিভাইসে প্রয়োগ করা ত্বরণ বল m/s 2 তে পরিমাপ করে, যার মধ্যে মাধ্যাকর্ষণ বলও অন্তর্ভুক্ত। | গতি সনাক্তকরণ (ঝাঁকুনি, কাত, ইত্যাদি)। | 
| TYPE_AMBIENT_TEMPERATURE | হার্ডওয়্যার | ঘরের তাপমাত্রা ডিগ্রি সেলসিয়াস (°C) তে পরিমাপ করে। নীচের নোটটি দেখুন। | বায়ুর তাপমাত্রা পর্যবেক্ষণ। | 
| TYPE_GRAVITY | সফটওয়্যার বা হার্ডওয়্যার | তিনটি ভৌত অক্ষের (x, y, z) উপর একটি ডিভাইসে প্রয়োগ করা মাধ্যাকর্ষণ বল m/s 2 তে পরিমাপ করে। | গতি সনাক্তকরণ (ঝাঁকুনি, কাত, ইত্যাদি)। | 
| TYPE_GYROSCOPE | হার্ডওয়্যার | তিনটি ভৌত অক্ষের (x, y, এবং z) প্রতিটির চারপাশে একটি ডিভাইসের ঘূর্ণনের হার rad/s পরিমাপ করে। | ঘূর্ণন সনাক্তকরণ (ঘূর্ণন, ঘূর্ণন, ইত্যাদি)। | 
| TYPE_LIGHT | হার্ডওয়্যার | পরিবেষ্টিত আলোর স্তর (আলোকসজ্জা) lx এ পরিমাপ করে। | স্ক্রিনের উজ্জ্বলতা নিয়ন্ত্রণ করা। | 
| TYPE_LINEAR_ACCELERATION | সফটওয়্যার বা হার্ডওয়্যার | মাধ্যাকর্ষণ বল বাদ দিয়ে, তিনটি ভৌত অক্ষের (x, y, এবং z) একটি ডিভাইসে প্রয়োগ করা ত্বরণ বল m/s 2 তে পরিমাপ করে। | একটি একক অক্ষ বরাবর ত্বরণ পর্যবেক্ষণ করা। | 
| TYPE_MAGNETIC_FIELD | হার্ডওয়্যার | তিনটি ভৌত অক্ষের (x, y, z) জন্য পরিবেষ্টিত ভূ-চৌম্বক ক্ষেত্রকে μT তে পরিমাপ করে। | একটি কম্পাস তৈরি করা। | 
| TYPE_ORIENTATION | সফটওয়্যার | তিনটি ভৌত অক্ষের (x, y, z) চারপাশে একটি ডিভাইস যে ঘূর্ণন তৈরি করে তা পরিমাপ করে। API লেভেল 3 অনুসারে, আপনি getRotationMatrix()পদ্ধতির সাথে মাধ্যাকর্ষণ সেন্সর এবং ভূ-চৌম্বকীয় ক্ষেত্র সেন্সর ব্যবহার করে একটি ডিভাইসের জন্য প্রবণতা ম্যাট্রিক্স এবং ঘূর্ণন ম্যাট্রিক্স পেতে পারেন। | ডিভাইসের অবস্থান নির্ধারণ করা হচ্ছে। | 
| TYPE_PRESSURE | হার্ডওয়্যার | hPa বা mbar-এ পরিবেষ্টিত বায়ুচাপ পরিমাপ করে। | বায়ুচাপের পরিবর্তন পর্যবেক্ষণ করা। | 
| TYPE_PROXIMITY | হার্ডওয়্যার | একটি ডিভাইসের ভিউ স্ক্রিনের সাপেক্ষে একটি বস্তুর নৈকট্য পরিমাপ করে সেমিতে। এই সেন্সরটি সাধারণত একটি হ্যান্ডসেট একজন ব্যক্তির কানের কাছে ধরা হচ্ছে কিনা তা নির্ধারণ করতে ব্যবহৃত হয়। | কলের সময় ফোনের অবস্থান। | 
| TYPE_RELATIVE_HUMIDITY | হার্ডওয়্যার | আপেক্ষিক পরিবেষ্টিত আর্দ্রতা শতাংশে (%) পরিমাপ করে। | শিশিরবিন্দু, পরম এবং আপেক্ষিক আর্দ্রতা পর্যবেক্ষণ করা। | 
| TYPE_ROTATION_VECTOR | সফটওয়্যার বা হার্ডওয়্যার | ডিভাইসের ঘূর্ণন ভেক্টরের তিনটি উপাদান প্রদান করে একটি ডিভাইসের ওরিয়েন্টেশন পরিমাপ করে। | গতি সনাক্তকরণ এবং ঘূর্ণন সনাক্তকরণ। | 
| TYPE_TEMPERATURE | হার্ডওয়্যার | ডিভাইসের তাপমাত্রা ডিগ্রি সেলসিয়াস (°C) তে পরিমাপ করে। এই সেন্সর বাস্তবায়ন ডিভাইসভেদে পরিবর্তিত হয় এবং API লেভেল ১৪-এ এই সেন্সরটি TYPE_AMBIENT_TEMPERATUREসেন্সর দিয়ে প্রতিস্থাপিত হয়েছিল। | তাপমাত্রা পর্যবেক্ষণ। | 
সেন্সর ফ্রেমওয়ার্ক
 আপনি অ্যান্ড্রয়েড সেন্সর ফ্রেমওয়ার্ক ব্যবহার করে এই সেন্সরগুলি অ্যাক্সেস করতে এবং কাঁচা সেন্সর ডেটা অর্জন করতে পারেন। সেন্সর ফ্রেমওয়ার্কটি android.hardware প্যাকেজের অংশ এবং এতে নিম্নলিখিত ক্লাস এবং ইন্টারফেস অন্তর্ভুক্ত রয়েছে:
-  SensorManager
- সেন্সর পরিষেবার একটি উদাহরণ তৈরি করতে আপনি এই ক্লাসটি ব্যবহার করতে পারেন। এই ক্লাসটি সেন্সর অ্যাক্সেস এবং তালিকাভুক্ত করার, সেন্সর ইভেন্ট লিসেনারের নিবন্ধন এবং নিবন্ধন বাতিল করার এবং ওরিয়েন্টেশন তথ্য অর্জনের জন্য বিভিন্ন পদ্ধতি প্রদান করে। এই ক্লাসটি বেশ কয়েকটি সেন্সর ধ্রুবকও প্রদান করে যা সেন্সরের নির্ভুলতা রিপোর্ট করতে, ডেটা অর্জনের হার নির্ধারণ করতে এবং সেন্সরগুলিকে ক্যালিব্রেট করতে ব্যবহৃত হয়।
-  Sensor
- আপনি এই ক্লাসটি ব্যবহার করে একটি নির্দিষ্ট সেন্সরের একটি উদাহরণ তৈরি করতে পারেন। এই ক্লাসটি বিভিন্ন পদ্ধতি প্রদান করে যা আপনাকে একটি সেন্সরের ক্ষমতা নির্ধারণ করতে সাহায্য করে।
-  SensorEvent
- সিস্টেমটি এই ক্লাসটি ব্যবহার করে একটি সেন্সর ইভেন্ট অবজেক্ট তৈরি করে, যা একটি সেন্সর ইভেন্ট সম্পর্কে তথ্য প্রদান করে। একটি সেন্সর ইভেন্ট অবজেক্টে নিম্নলিখিত তথ্য থাকে: কাঁচা সেন্সর ডেটা, ইভেন্ট তৈরিকারী সেন্সরের ধরণ, ডেটার নির্ভুলতা এবং ইভেন্টের টাইমস্ট্যাম্প।
-  SensorEventListener
- এই ইন্টারফেসটি ব্যবহার করে আপনি দুটি কলব্যাক পদ্ধতি তৈরি করতে পারেন যা সেন্সরের মান পরিবর্তন হলে বা সেন্সরের নির্ভুলতা পরিবর্তিত হলে বিজ্ঞপ্তি (সেন্সর ইভেন্ট) গ্রহণ করে।
একটি সাধারণ অ্যাপ্লিকেশনে আপনি দুটি মৌলিক কাজ সম্পাদনের জন্য এই সেন্সর-সম্পর্কিত API গুলি ব্যবহার করেন:
-  সেন্সর এবং সেন্সর ক্ষমতা সনাক্তকরণরানটাইমের সময় সেন্সর এবং সেন্সর ক্ষমতা সনাক্ত করা কার্যকর যদি আপনার অ্যাপ্লিকেশনটিতে এমন বৈশিষ্ট্য থাকে যা নির্দিষ্ট সেন্সর ধরণের বা ক্ষমতার উপর নির্ভর করে। উদাহরণস্বরূপ, আপনি একটি ডিভাইসে উপস্থিত সমস্ত সেন্সর সনাক্ত করতে এবং উপস্থিত না থাকা সেন্সরগুলির উপর নির্ভর করে এমন কোনও অ্যাপ্লিকেশন বৈশিষ্ট্য অক্ষম করতে চাইতে পারেন। একইভাবে, আপনি একটি নির্দিষ্ট ধরণের সমস্ত সেন্সর সনাক্ত করতে চাইতে পারেন যাতে আপনি আপনার অ্যাপ্লিকেশনের জন্য সর্বোত্তম কর্মক্ষমতা সম্পন্ন সেন্সর বাস্তবায়ন চয়ন করতে পারেন। 
-  সেন্সর ইভেন্টগুলি পর্যবেক্ষণ করুনসেন্সর ইভেন্টগুলি পর্যবেক্ষণ করার মাধ্যমে আপনি কাঁচা সেন্সর ডেটা সংগ্রহ করতে পারেন। যখনই কোনও সেন্সর তার পরিমাপ করা প্যারামিটারগুলিতে কোনও পরিবর্তন সনাক্ত করে তখনই একটি সেন্সর ইভেন্ট ঘটে। একটি সেন্সর ইভেন্ট আপনাকে চারটি তথ্য প্রদান করে: ইভেন্টটি ট্রিগারকারী সেন্সরের নাম, ইভেন্টের টাইমস্ট্যাম্প, ইভেন্টের নির্ভুলতা এবং ইভেন্টটি ট্রিগারকারী সেন্সর ডেটা। 
সেন্সরের উপলব্ধতা
সেন্সরের প্রাপ্যতা ডিভাইসভেদে ভিন্ন হলেও, এটি অ্যান্ড্রয়েড সংস্করণভেদে ভিন্ন হতে পারে। এর কারণ হল বিভিন্ন প্ল্যাটফর্ম রিলিজের সময় অ্যান্ড্রয়েড সেন্সর চালু করা হয়েছে। উদাহরণস্বরূপ, অ্যান্ড্রয়েড 1.5 (API লেভেল 3) তে অনেক সেন্সর চালু করা হয়েছিল, কিন্তু কিছু বাস্তবায়িত হয়নি এবং অ্যান্ড্রয়েড 2.3 (API লেভেল 9) পর্যন্ত ব্যবহারের জন্য উপলব্ধ ছিল না। একইভাবে, অ্যান্ড্রয়েড 2.3 (API লেভেল 9) এবং অ্যান্ড্রয়েড 4.0 (API লেভেল 14) তে বেশ কয়েকটি সেন্সর চালু করা হয়েছিল। দুটি সেন্সরকে অবচিত করা হয়েছে এবং নতুন, উন্নত সেন্সর দ্বারা প্রতিস্থাপিত করা হয়েছে।
টেবিল ২-এ প্ল্যাটফর্ম-বাই-প্ল্যাটফর্ম ভিত্তিতে প্রতিটি সেন্সরের প্রাপ্যতার সারসংক্ষেপ দেওয়া হয়েছে। মাত্র চারটি প্ল্যাটফর্ম তালিকাভুক্ত করা হয়েছে কারণ এই প্ল্যাটফর্মগুলিতে সেন্সর পরিবর্তনের সাথে জড়িত প্ল্যাটফর্ম রয়েছে। যেসব সেন্সর বন্ধ করে দেওয়া হয়েছে সেগুলি পরবর্তী প্ল্যাটফর্মগুলিতে এখনও উপলব্ধ (যদি সেন্সরটি কোনও ডিভাইসে উপস্থিত থাকে), যা অ্যান্ড্রয়েডের ফরোয়ার্ড সামঞ্জস্য নীতির সাথে সঙ্গতিপূর্ণ।
টেবিল ২। প্ল্যাটফর্ম অনুসারে সেন্সরের প্রাপ্যতা।
| সেন্সর | অ্যান্ড্রয়েড ৪.০ (এপিআই লেভেল ১৪) | অ্যান্ড্রয়েড ২.৩ (এপিআই লেভেল ৯) | অ্যান্ড্রয়েড ২.২ (এপিআই লেভেল ৮) | অ্যান্ড্রয়েড ১.৫ (এপিআই লেভেল ৩) | 
|---|---|---|---|---|
| TYPE_ACCELEROMETER | হাঁ | হাঁ | হাঁ | হাঁ | 
| TYPE_AMBIENT_TEMPERATURE | হাঁ | প্রযোজ্য নয় | প্রযোজ্য নয় | প্রযোজ্য নয় | 
| TYPE_GRAVITY | হাঁ | হাঁ | প্রযোজ্য নয় | প্রযোজ্য নয় | 
| TYPE_GYROSCOPE | হাঁ | হাঁ | এন/এ ১ | এন/এ ১ | 
| TYPE_LIGHT | হাঁ | হাঁ | হাঁ | হাঁ | 
| TYPE_LINEAR_ACCELERATION | হাঁ | হাঁ | প্রযোজ্য নয় | প্রযোজ্য নয় | 
| TYPE_MAGNETIC_FIELD | হাঁ | হাঁ | হাঁ | হাঁ | 
| TYPE_ORIENTATION | হ্যাঁ ২ | হ্যাঁ ২ | হ্যাঁ ২ | হাঁ | 
| TYPE_PRESSURE | হাঁ | হাঁ | এন/এ ১ | এন/এ ১ | 
| TYPE_PROXIMITY | হাঁ | হাঁ | হাঁ | হাঁ | 
| TYPE_RELATIVE_HUMIDITY | হাঁ | প্রযোজ্য নয় | প্রযোজ্য নয় | প্রযোজ্য নয় | 
| TYPE_ROTATION_VECTOR | হাঁ | হাঁ | প্রযোজ্য নয় | প্রযোজ্য নয় | 
| TYPE_TEMPERATURE | হ্যাঁ ২ | হাঁ | হাঁ | হাঁ | 
১ এই সেন্সর টাইপটি অ্যান্ড্রয়েড ১.৫ (এপিআই লেভেল ৩) এ যোগ করা হয়েছিল, কিন্তু অ্যান্ড্রয়েড ২.৩ (এপিআই লেভেল ৯) পর্যন্ত এটি ব্যবহারের জন্য উপলব্ধ ছিল না।
2 এই সেন্সরটি পাওয়া যাচ্ছে, কিন্তু এটি বন্ধ করে দেওয়া হয়েছে।
সেন্সর এবং সেন্সর ক্ষমতা সনাক্তকরণ
অ্যান্ড্রয়েড সেন্সর ফ্রেমওয়ার্কটি বেশ কয়েকটি পদ্ধতি প্রদান করে যা রানটাইমে কোন ডিভাইসে কোন সেন্সর রয়েছে তা নির্ধারণ করা সহজ করে তোলে। API এমন পদ্ধতিও প্রদান করে যা আপনাকে প্রতিটি সেন্সরের ক্ষমতা নির্ধারণ করতে দেয়, যেমন এর সর্বোচ্চ পরিসর, এর রেজোলিউশন এবং এর পাওয়ার প্রয়োজনীয়তা।
 কোনও ডিভাইসে থাকা সেন্সরগুলি সনাক্ত করতে আপনাকে প্রথমে সেন্সর পরিষেবার একটি রেফারেন্স পেতে হবে। এটি করার জন্য, আপনি getSystemService() পদ্ধতিটি কল করে এবং SENSOR_SERVICE আর্গুমেন্টটি পাস করে SensorManager ক্লাসের একটি উদাহরণ তৈরি করতে পারেন। উদাহরণস্বরূপ: 
কোটলিন
private lateinit var sensorManager: SensorManager ... sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
জাভা
private SensorManager sensorManager; ... sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
 এরপর, আপনি getSensorList() পদ্ধতিতে কল করে এবং TYPE_ALL ধ্রুবক ব্যবহার করে একটি ডিভাইসের প্রতিটি সেন্সরের তালিকা পেতে পারেন। উদাহরণস্বরূপ: 
কোটলিন
val deviceSensors: List<Sensor> = sensorManager.getSensorList(Sensor.TYPE_ALL)
জাভা
List<Sensor> deviceSensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
 যদি আপনি একটি নির্দিষ্ট ধরণের সমস্ত সেন্সর তালিকাভুক্ত করতে চান, তাহলে আপনি TYPE_ALL এর পরিবর্তে অন্য একটি ধ্রুবক ব্যবহার করতে পারেন যেমন TYPE_GYROSCOPE , TYPE_LINEAR_ACCELERATION , অথবা TYPE_GRAVITY ।
 আপনি getDefaultSensor() পদ্ধতি ব্যবহার করে এবং নির্দিষ্ট সেন্সরের জন্য টাইপ ধ্রুবক পাস করে একটি ডিভাইসে একটি নির্দিষ্ট ধরণের সেন্সর বিদ্যমান কিনা তা নির্ধারণ করতে পারেন। যদি একটি ডিভাইসে একটি নির্দিষ্ট ধরণের একাধিক সেন্সর থাকে, তাহলে সেন্সরগুলির মধ্যে একটিকে ডিফল্ট সেন্সর হিসাবে মনোনীত করতে হবে। যদি একটি নির্দিষ্ট ধরণের সেন্সরের জন্য একটি ডিফল্ট সেন্সর বিদ্যমান না থাকে, তাহলে পদ্ধতি কলটি null ফেরত দেয়, যার অর্থ ডিভাইসটিতে সেই ধরণের সেন্সর নেই। উদাহরণস্বরূপ, নিম্নলিখিত কোডটি পরীক্ষা করে যে কোনও ডিভাইসে একটি ম্যাগনেটোমিটার আছে কিনা: 
কোটলিন
private lateinit var sensorManager: SensorManager ... sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager if (sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD) != null) { // Success! There's a magnetometer. } else { // Failure! No magnetometer. }
জাভা
private SensorManager sensorManager; ... sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); if (sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD) != null){ // Success! There's a magnetometer. } else { // Failure! No magnetometer. }
দ্রষ্টব্য: অ্যান্ড্রয়েড ডিভাইস নির্মাতাদের তাদের অ্যান্ড্রয়েড-চালিত ডিভাইসগুলিতে কোনও নির্দিষ্ট ধরণের সেন্সর তৈরি করতে বাধ্য করে না, তাই ডিভাইসগুলিতে বিস্তৃত পরিসরের সেন্সর কনফিগারেশন থাকতে পারে।
 ডিভাইসে থাকা সেন্সরগুলির তালিকা তৈরি করার পাশাপাশি, আপনি পৃথক সেন্সরগুলির ক্ষমতা এবং বৈশিষ্ট্য নির্ধারণের জন্য Sensor ক্লাসের পাবলিক পদ্ধতিগুলি ব্যবহার করতে পারেন। আপনি যদি চান যে আপনার অ্যাপ্লিকেশনটি ডিভাইসে কোন সেন্সর বা সেন্সর ক্ষমতা উপলব্ধ তার উপর ভিত্তি করে ভিন্নভাবে আচরণ করবে তবে এটি কার্যকর। উদাহরণস্বরূপ, আপনি সেন্সরের রেজোলিউশন এবং পরিমাপের সর্বাধিক পরিসর পেতে getResolution() এবং getMaximumRange() পদ্ধতি ব্যবহার করতে পারেন। আপনি সেন্সরের পাওয়ার প্রয়োজনীয়তা পেতে getPower() পদ্ধতিও ব্যবহার করতে পারেন।
 দুটি পাবলিক পদ্ধতি বিশেষভাবে কার্যকর যদি আপনি আপনার অ্যাপ্লিকেশনটিকে বিভিন্ন নির্মাতার সেন্সর বা সেন্সরের বিভিন্ন সংস্করণের জন্য অপ্টিমাইজ করতে চান। উদাহরণস্বরূপ, যদি আপনার অ্যাপ্লিকেশনটিকে টিল্ট এবং শেকের মতো ব্যবহারকারীর অঙ্গভঙ্গি পর্যবেক্ষণ করতে হয়, তাহলে আপনি নতুন ডিভাইসগুলির জন্য ডেটা ফিল্টারিং নিয়ম এবং অপ্টিমাইজেশনের একটি সেট তৈরি করতে পারেন যাদের একটি নির্দিষ্ট বিক্রেতার মাধ্যাকর্ষণ সেন্সর রয়েছে, এবং যে ডিভাইসগুলিতে মাধ্যাকর্ষণ সেন্সর নেই এবং শুধুমাত্র একটি অ্যাক্সিলোমিটার রয়েছে তাদের জন্য ডেটা ফিল্টারিং নিয়ম এবং অপ্টিমাইজেশনের একটি সেট তৈরি করতে পারেন। নিম্নলিখিত কোড নমুনা আপনাকে দেখায় যে আপনি কীভাবে এটি করার জন্য getVendor() এবং getVersion() পদ্ধতি ব্যবহার করতে পারেন। এই নমুনায়, আমরা একটি গ্র্যাভিটি সেন্সর খুঁজছি যা Google LLC কে বিক্রেতা হিসাবে তালিকাভুক্ত করে এবং যার সংস্করণ নম্বর 3 থাকে। যদি সেই নির্দিষ্ট সেন্সরটি ডিভাইসে উপস্থিত না থাকে, তাহলে আমরা অ্যাক্সিলোমিটার ব্যবহার করার চেষ্টা করি। 
কোটলিন
private lateinit var sensorManager: SensorManager private var mSensor: Sensor? = null ... sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager if (sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY) != null) { val gravSensors: List<Sensor> = sensorManager.getSensorList(Sensor.TYPE_GRAVITY) // Use the version 3 gravity sensor. mSensor = gravSensors.firstOrNull { it.vendor.contains("Google LLC") && it.version == 3 } } if (mSensor == null) { // Use the accelerometer. mSensor = if (sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) != null) { sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) } else { // Sorry, there are no accelerometers on your device. // You can't play this game. null } }
জাভা
private SensorManager sensorManager; private Sensor mSensor; ... sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); mSensor = null; if (sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY) != null){ List<Sensor> gravSensors = sensorManager.getSensorList(Sensor.TYPE_GRAVITY); for(int i=0; i<gravSensors.size(); i++) { if ((gravSensors.get(i).getVendor().contains("Google LLC")) && (gravSensors.get(i).getVersion() == 3)){ // Use the version 3 gravity sensor. mSensor = gravSensors.get(i); } } } if (mSensor == null){ // Use the accelerometer. if (sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) != null){ mSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); } else{ // Sorry, there are no accelerometers on your device. // You can't play this game. } }
 আরেকটি কার্যকর পদ্ধতি হল getMinDelay() পদ্ধতি, যা একটি সেন্সর ডেটা সেন্স করার জন্য ন্যূনতম সময়ের ব্যবধান (মাইক্রোসেকেন্ডে) ফেরত দেয়। getMinDelay() পদ্ধতির জন্য শূন্য-বহির্ভূত মান প্রদান করে এমন যেকোনো সেন্সরকে স্ট্রিমিং সেন্সর বলা হয়। স্ট্রিমিং সেন্সরগুলি নিয়মিত বিরতিতে ডেটা সেন্স করে এবং Android 2.3 (API লেভেল 9) এ চালু করা হয়েছিল। getMinDelay() পদ্ধতিতে কল করার সময় যদি কোনও সেন্সর শূন্য ফেরত দেয়, তাহলে এর অর্থ হল সেন্সরটি স্ট্রিমিং সেন্সর নয় কারণ এটি কেবল তখনই ডেটা রিপোর্ট করে যখন এটি সেন্সিং করা প্যারামিটারগুলিতে পরিবর্তন হয়।
 getMinDelay() পদ্ধতিটি কার্যকর কারণ এটি আপনাকে সর্বোচ্চ কত হারে একটি সেন্সর ডেটা অর্জন করতে পারে তা নির্ধারণ করতে দেয়। যদি আপনার অ্যাপ্লিকেশনের কিছু বৈশিষ্ট্যের জন্য উচ্চ ডেটা অর্জনের হার বা স্ট্রিমিং সেন্সরের প্রয়োজন হয়, তাহলে আপনি এই পদ্ধতিটি ব্যবহার করে নির্ধারণ করতে পারেন যে একটি সেন্সর সেই প্রয়োজনীয়তাগুলি পূরণ করে কিনা এবং তারপরে সেই অনুযায়ী আপনার অ্যাপ্লিকেশনের প্রাসঙ্গিক বৈশিষ্ট্যগুলি সক্ষম বা অক্ষম করতে পারে।
সতর্কতা: সেন্সরের সর্বোচ্চ ডেটা অর্জনের হার অগত্যা সেই হার নয় যেটিতে সেন্সর ফ্রেমওয়ার্ক আপনার অ্যাপ্লিকেশনে সেন্সর ডেটা সরবরাহ করে। সেন্সর ফ্রেমওয়ার্ক সেন্সর ইভেন্টের মাধ্যমে ডেটা রিপোর্ট করে এবং বেশ কয়েকটি কারণ আপনার অ্যাপ্লিকেশন যে হারে সেন্সর ইভেন্ট গ্রহণ করে তা প্রভাবিত করে। আরও তথ্যের জন্য, মনিটরিং সেন্সর ইভেন্ট দেখুন।
সেন্সর ইভেন্ট পর্যবেক্ষণ
 কাঁচা সেন্সর ডেটা নিরীক্ষণের জন্য আপনাকে দুটি কলব্যাক পদ্ধতি প্রয়োগ করতে হবে যা SensorEventListener ইন্টারফেসের মাধ্যমে প্রকাশিত হয়: onAccuracyChanged() এবং onSensorChanged() । যখনই নিম্নলিখিতগুলি ঘটে তখন অ্যান্ড্রয়েড সিস্টেম এই পদ্ধতিগুলি কল করে:
-  সেন্সরের নির্ভুলতা পরিবর্তিত হয়।এই ক্ষেত্রে সিস্টেমটি onAccuracyChanged()পদ্ধতি ব্যবহার করে, যা আপনাকে পরিবর্তিতSensorঅবজেক্ট এবং সেন্সরের নতুন নির্ভুলতার একটি রেফারেন্স প্রদান করে। নির্ভুলতা চারটি স্ট্যাটাস ধ্রুবকের একটি দ্বারা প্রতিনিধিত্ব করা হয়:SENSOR_STATUS_ACCURACY_LOW,SENSOR_STATUS_ACCURACY_MEDIUM,SENSOR_STATUS_ACCURACY_HIGH, অথবাSENSOR_STATUS_UNRELIABLE.
-  একটি সেন্সর একটি নতুন মান রিপোর্ট করে।এই ক্ষেত্রে সিস্টেমটি onSensorChanged()পদ্ধতি ব্যবহার করে, যা আপনাকে একটিSensorEventঅবজেক্ট প্রদান করে। একটিSensorEventঅবজেক্টে নতুন সেন্সর ডেটা সম্পর্কে তথ্য থাকে, যার মধ্যে রয়েছে: ডেটার নির্ভুলতা, ডেটা তৈরিকারী সেন্সর, ডেটা তৈরির সময়সীমা এবং সেন্সর রেকর্ড করা নতুন ডেটা।
 নিচের কোডটি দেখায় কিভাবে onSensorChanged() পদ্ধতি ব্যবহার করে লাইট সেন্সর থেকে ডেটা নিরীক্ষণ করতে হয়। এই উদাহরণে একটি TextView এ কাঁচা সেন্সর ডেটা প্রদর্শিত হয় যা main.xml ফাইলে sensor_data হিসাবে সংজ্ঞায়িত করা হয়েছে। 
কোটলিন
class SensorActivity : Activity(), SensorEventListener { private lateinit var sensorManager: SensorManager private var mLight: Sensor? = null public override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main) sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager mLight = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT) } override fun onAccuracyChanged(sensor: Sensor, accuracy: Int) { // Do something here if sensor accuracy changes. } override fun onSensorChanged(event: SensorEvent) { // The light sensor returns a single value. // Many sensors return 3 values, one for each axis. val lux = event.values[0] // Do something with this sensor value. } override fun onResume() { super.onResume() mLight?.also { light -> sensorManager.registerListener(this, light, SensorManager.SENSOR_DELAY_NORMAL) } } override fun onPause() { super.onPause() sensorManager.unregisterListener(this) } }
জাভা
public class SensorActivity extends Activity implements SensorEventListener { private SensorManager sensorManager; private Sensor mLight; @Override public final void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); mLight = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); } @Override public final void onAccuracyChanged(Sensor sensor, int accuracy) { // Do something here if sensor accuracy changes. } @Override public final void onSensorChanged(SensorEvent event) { // The light sensor returns a single value. // Many sensors return 3 values, one for each axis. float lux = event.values[0]; // Do something with this sensor value. } @Override protected void onResume() { super.onResume(); sensorManager.registerListener(this, mLight, SensorManager.SENSOR_DELAY_NORMAL); } @Override protected void onPause() { super.onPause(); sensorManager.unregisterListener(this); } }
 এই উদাহরণে, registerListener() পদ্ধতিটি ব্যবহার করার সময় ডিফল্ট ডেটা বিলম্ব ( SENSOR_DELAY_NORMAL ) নির্দিষ্ট করা হয়। ডেটা বিলম্ব (অথবা স্যাম্পলিং রেট) onSensorChanged() কলব্যাক পদ্ধতির মাধ্যমে আপনার অ্যাপ্লিকেশনে সেন্সর ইভেন্টগুলি পাঠানোর ব্যবধান নিয়ন্ত্রণ করে। ডিফল্ট ডেটা বিলম্ব সাধারণ স্ক্রিন ওরিয়েন্টেশন পরিবর্তনগুলি পর্যবেক্ষণের জন্য উপযুক্ত এবং 200,000 মাইক্রোসেকেন্ড বিলম্ব ব্যবহার করে। আপনি অন্যান্য ডেটা বিলম্ব নির্দিষ্ট করতে পারেন, যেমন SENSOR_DELAY_GAME (20,000 মাইক্রোসেকেন্ড বিলম্ব), SENSOR_DELAY_UI (60,000 মাইক্রোসেকেন্ড বিলম্ব), অথবা SENSOR_DELAY_FASTEST (0 মাইক্রোসেকেন্ড বিলম্ব)। Android 3.0 (API লেভেল 11) হিসাবে আপনি বিলম্বকে একটি পরম মান (মাইক্রোসেকেন্ডে) হিসাবেও নির্দিষ্ট করতে পারেন।
আপনার নির্দিষ্ট করা বিলম্বটি কেবল একটি প্রস্তাবিত বিলম্ব। অ্যান্ড্রয়েড সিস্টেম এবং অন্যান্য অ্যাপ্লিকেশনগুলি এই বিলম্ব পরিবর্তন করতে পারে। সর্বোত্তম অনুশীলন হিসাবে, আপনার যতটা সম্ভব সর্বাধিক বিলম্ব নির্দিষ্ট করা উচিত কারণ সিস্টেমটি সাধারণত আপনার নির্দিষ্ট করা বিলম্বের চেয়ে কম বিলম্ব ব্যবহার করে (অর্থাৎ, আপনার সবচেয়ে ধীর স্যাম্পলিং রেট বেছে নেওয়া উচিত যা এখনও আপনার অ্যাপ্লিকেশনের চাহিদা পূরণ করে)। একটি বৃহত্তর বিলম্ব ব্যবহার করলে প্রসেসরের উপর কম লোড চাপানো হয় এবং তাই কম শক্তি ব্যবহার করা হয়।
সেন্সর ফ্রেমওয়ার্ক আপনার অ্যাপ্লিকেশনে সেন্সর ইভেন্টগুলি কত হারে পাঠাচ্ছে তা নির্ধারণের জন্য কোনও সর্বজনীন পদ্ধতি নেই; তবে, আপনি প্রতিটি সেন্সর ইভেন্টের সাথে সম্পর্কিত টাইমস্ট্যাম্পগুলি ব্যবহার করে একাধিক ইভেন্টে নমুনা হার গণনা করতে পারেন। একবার সেট করার পরে আপনাকে নমুনা হার (বিলম্ব) পরিবর্তন করতে হবে না। যদি কোনও কারণে আপনার বিলম্ব পরিবর্তন করার প্রয়োজন হয়, তাহলে আপনাকে সেন্সর শ্রোতাটিকে নিবন্ধনমুক্ত করে পুনরায় নিবন্ধন করতে হবে।
 এটাও মনে রাখা গুরুত্বপূর্ণ যে এই উদাহরণে onResume() এবং onPause() কলব্যাক পদ্ধতি ব্যবহার করে সেন্সর ইভেন্ট লিসেনার নিবন্ধন এবং নিবন্ধনমুক্ত করা হয়। সর্বোত্তম অনুশীলন হিসেবে আপনার সর্বদা অপ্রয়োজনীয় সেন্সরগুলি অক্ষম করা উচিত, বিশেষ করে যখন আপনার কার্যকলাপ স্থগিত থাকে। এটি করতে ব্যর্থ হলে মাত্র কয়েক ঘন্টার মধ্যে ব্যাটারি নিষ্কাশন হতে পারে কারণ কিছু সেন্সরের যথেষ্ট পাওয়ার প্রয়োজন হয় এবং তারা দ্রুত ব্যাটারি শক্তি ব্যবহার করতে পারে। স্ক্রিন বন্ধ হয়ে গেলে সিস্টেম স্বয়ংক্রিয়ভাবে সেন্সরগুলি অক্ষম করবে না।
বিভিন্ন সেন্সর কনফিগারেশন পরিচালনা করা
অ্যান্ড্রয়েড ডিভাইসের জন্য কোনও স্ট্যান্ডার্ড সেন্সর কনফিগারেশন নির্দিষ্ট করে না, যার অর্থ ডিভাইস নির্মাতারা তাদের অ্যান্ড্রয়েড-চালিত ডিভাইসগুলিতে যে কোনও সেন্সর কনফিগারেশন অন্তর্ভুক্ত করতে পারে। ফলস্বরূপ, ডিভাইসগুলি বিভিন্ন ধরণের কনফিগারেশনে বিভিন্ন ধরণের সেন্সর অন্তর্ভুক্ত করতে পারে। যদি আপনার অ্যাপ্লিকেশনটি একটি নির্দিষ্ট ধরণের সেন্সরের উপর নির্ভর করে, তাহলে আপনাকে নিশ্চিত করতে হবে যে সেন্সরটি ডিভাইসে উপস্থিত রয়েছে যাতে আপনার অ্যাপটি সফলভাবে চলতে পারে।
একটি ডিভাইসে একটি নির্দিষ্ট সেন্সর উপস্থিত আছে কিনা তা নিশ্চিত করার জন্য আপনার কাছে দুটি বিকল্প রয়েছে:
- রানটাইমের সময় সেন্সর সনাক্ত করুন এবং যথাযথভাবে অ্যাপ্লিকেশন বৈশিষ্ট্যগুলি সক্ষম বা অক্ষম করুন।
- নির্দিষ্ট সেন্সর কনফিগারেশন সহ ডিভাইসগুলিকে টার্গেট করতে Google Play ফিল্টার ব্যবহার করুন।
প্রতিটি বিকল্প নিম্নলিখিত বিভাগগুলিতে আলোচনা করা হয়েছে।
রানটাইমে সেন্সর সনাক্তকরণ
যদি আপনার অ্যাপ্লিকেশনটি একটি নির্দিষ্ট ধরণের সেন্সর ব্যবহার করে, কিন্তু এটির উপর নির্ভর করে না, তাহলে আপনি রানটাইমের সময় সেন্সরটি সনাক্ত করতে সেন্সর ফ্রেমওয়ার্ক ব্যবহার করতে পারেন এবং তারপরে যথাযথভাবে অ্যাপ্লিকেশন বৈশিষ্ট্যগুলি অক্ষম বা সক্ষম করতে পারেন। উদাহরণস্বরূপ, একটি নেভিগেশন অ্যাপ্লিকেশন তাপমাত্রা, ব্যারোমেট্রিক চাপ, অবস্থান এবং কম্পাস বিয়ারিং প্রদর্শনের জন্য তাপমাত্রা সেন্সর, চাপ সেন্সর, GPS সেন্সর এবং ভূ-চৌম্বকীয় ক্ষেত্র সেন্সর ব্যবহার করতে পারে। যদি কোনও ডিভাইসে চাপ সেন্সর না থাকে, তাহলে আপনি রানটাইমের সময় চাপ সেন্সরের অনুপস্থিতি সনাক্ত করতে সেন্সর ফ্রেমওয়ার্ক ব্যবহার করতে পারেন এবং তারপরে আপনার অ্যাপ্লিকেশনের UI এর সেই অংশটি অক্ষম করতে পারেন যা চাপ প্রদর্শন করে। উদাহরণস্বরূপ, নিম্নলিখিত কোডটি ডিভাইসে চাপ সেন্সর আছে কিনা তা পরীক্ষা করে:
কোটলিন
private lateinit var sensorManager: SensorManager ... sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager if (sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE) != null) { // Success! There's a pressure sensor. } else { // Failure! No pressure sensor. }
জাভা
private SensorManager sensorManager; ... sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); if (sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE) != null){ // Success! There's a pressure sensor. } else { // Failure! No pressure sensor. }
নির্দিষ্ট সেন্সর কনফিগারেশন লক্ষ্য করতে গুগল প্লে ফিল্টার ব্যবহার করা
 যদি আপনি Google Play তে আপনার অ্যাপ্লিকেশন প্রকাশ করেন, তাহলে আপনি আপনার ম্যানিফেস্ট ফাইলের <uses-feature> উপাদানটি ব্যবহার করে এমন ডিভাইসগুলি থেকে অ্যাপ্লিকেশন ফিল্টার করতে পারেন যেগুলিতে আপনার অ্যাপ্লিকেশনের জন্য উপযুক্ত সেন্সর কনফিগারেশন নেই। <uses-feature> উপাদানটিতে বেশ কয়েকটি হার্ডওয়্যার বর্ণনাকারী রয়েছে যা আপনাকে নির্দিষ্ট সেন্সরের উপস্থিতির উপর ভিত্তি করে অ্যাপ্লিকেশন ফিল্টার করতে দেয়। আপনি যে সেন্সরগুলি তালিকাভুক্ত করতে পারেন সেগুলির মধ্যে রয়েছে: অ্যাক্সিলোমিটার, ব্যারোমিটার, কম্পাস (ভূ-চৌম্বকীয় ক্ষেত্র), জাইরোস্কোপ, আলো এবং প্রক্সিমিটি। নিম্নলিখিত একটি উদাহরণ ম্যানিফেস্ট এন্ট্রি যা অ্যাক্সিলোমিটার নেই এমন অ্যাপ্লিকেশনগুলিকে ফিল্টার করে: 
<uses-feature android:name="android.hardware.sensor.accelerometer" android:required="true" />
আপনি যদি আপনার অ্যাপ্লিকেশনের ম্যানিফেস্টে এই উপাদান এবং বর্ণনাকারী যোগ করেন, তাহলে ব্যবহারকারীরা শুধুমাত্র তখনই Google Play তে আপনার অ্যাপ্লিকেশনটি দেখতে পাবেন যদি তাদের ডিভাইসে অ্যাক্সিলোমিটার থাকে।
 আপনার অ্যাপ্লিকেশনটি সম্পূর্ণরূপে একটি নির্দিষ্ট সেন্সরের উপর নির্ভর করলেই কেবল বর্ণনাকারীকে android:required="true" এ সেট করা উচিত। যদি আপনার অ্যাপ্লিকেশনটি কিছু কার্যকারিতার জন্য একটি সেন্সর ব্যবহার করে, কিন্তু সেন্সর ছাড়াই চলে, তাহলে আপনার <uses-feature> এলিমেন্টে সেন্সরটি তালিকাভুক্ত করা উচিত, কিন্তু বর্ণনাকারীকে android:required="false" এ সেট করা উচিত। এটি নিশ্চিত করতে সাহায্য করে যে ডিভাইসগুলিতে সেই নির্দিষ্ট সেন্সর না থাকলেও তারা আপনার অ্যাপটি ইনস্টল করতে পারে। এটি একটি প্রকল্প ব্যবস্থাপনার সেরা অনুশীলন যা আপনাকে আপনার অ্যাপ্লিকেশনটি ব্যবহার করে এমন বৈশিষ্ট্যগুলি ট্র্যাক রাখতে সহায়তা করে। মনে রাখবেন, যদি আপনার অ্যাপ্লিকেশনটি একটি নির্দিষ্ট সেন্সর ব্যবহার করে, কিন্তু সেন্সর ছাড়াই চলে, তাহলে রানটাইমে আপনার সেন্সরটি সনাক্ত করা উচিত এবং যথাযথভাবে অ্যাপ্লিকেশন বৈশিষ্ট্যগুলি অক্ষম বা সক্ষম করা উচিত।
সেন্সর সমন্বয় ব্যবস্থা
সাধারণভাবে, সেন্সর ফ্রেমওয়ার্ক ডেটা মান প্রকাশের জন্য একটি আদর্শ 3-অক্ষ স্থানাঙ্ক সিস্টেম ব্যবহার করে। বেশিরভাগ সেন্সরের ক্ষেত্রে, ডিভাইসটি যখন তার ডিফল্ট ওরিয়েন্টেশনে ধরে রাখা হয় তখন স্থানাঙ্ক সিস্টেমটি ডিভাইসের স্ক্রিনের সাপেক্ষে সংজ্ঞায়িত করা হয় (চিত্র 1 দেখুন)। যখন একটি ডিভাইসকে তার ডিফল্ট ওরিয়েন্টেশনে রাখা হয়, তখন X অক্ষটি অনুভূমিকভাবে ডানদিকে নির্দেশ করে, Y অক্ষটি উল্লম্বভাবে নির্দেশ করে এবং উপরে নির্দেশ করে এবং Z অক্ষটি স্ক্রিনের মুখের বাইরের দিকে নির্দেশ করে। এই সিস্টেমে, স্ক্রিনের পিছনে স্থানাঙ্কগুলির নেতিবাচক Z মান থাকে। এই স্থানাঙ্ক সিস্টেমটি নিম্নলিখিত সেন্সরগুলি দ্বারা ব্যবহৃত হয়:

চিত্র ১. সেন্সর API দ্বারা ব্যবহৃত স্থানাঙ্ক সিস্টেম (একটি ডিভাইসের সাপেক্ষে)।
- ত্বরণ সেন্সর
- মাধ্যাকর্ষণ সেন্সর
- জাইরোস্কোপ
- লিনিয়ার অ্যাক্সিলারেশন সেন্সর
- ভূ-চৌম্বকীয় ক্ষেত্র সেন্সর
এই স্থানাঙ্ক ব্যবস্থা সম্পর্কে সবচেয়ে গুরুত্বপূর্ণ বিষয় হল যে ডিভাইসের স্ক্রিন ওরিয়েন্টেশন পরিবর্তন হলে অক্ষগুলি অদলবদল করা হয় না - অর্থাৎ, ডিভাইসটি চলার সাথে সাথে সেন্সরের স্থানাঙ্ক ব্যবস্থা কখনও পরিবর্তিত হয় না। এই আচরণটি OpenGL স্থানাঙ্ক ব্যবস্থার আচরণের মতোই।
আরেকটি বিষয় বুঝতে হবে যে আপনার অ্যাপ্লিকেশনটি এমন ধরে নেবে না যে কোনও ডিভাইসের প্রাকৃতিক (ডিফল্ট) ওরিয়েন্টেশন হল পোর্ট্রেট। অনেক ট্যাবলেট ডিভাইসের প্রাকৃতিক ওরিয়েন্টেশন হল ল্যান্ডস্কেপ। এবং সেন্সর স্থানাঙ্ক ব্যবস্থা সর্বদা একটি ডিভাইসের প্রাকৃতিক ওরিয়েন্টেশনের উপর ভিত্তি করে তৈরি হয়।
 অবশেষে, যদি আপনার অ্যাপ্লিকেশনটি অন-স্ক্রিন ডিসপ্লের সাথে সেন্সর ডেটার মিল খুঁজে পায়, তাহলে স্ক্রিন রোটেশন নির্ধারণের জন্য আপনাকে getRotation() পদ্ধতি ব্যবহার করতে হবে এবং তারপর সেন্সর স্থানাঙ্কগুলিকে স্ক্রিন স্থানাঙ্কের সাথে ম্যাপ করার জন্য remapCoordinateSystem() পদ্ধতি ব্যবহার করতে হবে। আপনার ম্যানিফেস্ট শুধুমাত্র পোর্ট্রেট-ডিসপ্লে নির্দিষ্ট করলেও আপনাকে এটি করতে হবে।
 দ্রষ্টব্য: কিছু সেন্সর এবং পদ্ধতি এমন একটি স্থানাঙ্ক ব্যবস্থা ব্যবহার করে যা বিশ্বের রেফারেন্স ফ্রেমের সাথে সম্পর্কিত (ডিভাইসের রেফারেন্স ফ্রেমের বিপরীতে)। এই সেন্সর এবং পদ্ধতিগুলি এমন ডেটা ফেরত দেয় যা পৃথিবীর সাপেক্ষে ডিভাইসের গতি বা ডিভাইসের অবস্থান উপস্থাপন করে। আরও তথ্যের জন্য, getOrientation() পদ্ধতি, getRotationMatrix() পদ্ধতি, ওরিয়েন্টেশন সেন্সর এবং ঘূর্ণন ভেক্টর সেন্সর দেখুন।
সেন্সর রেট-সীমাবদ্ধকরণ
ব্যবহারকারীদের সম্পর্কে সম্ভাব্য সংবেদনশীল তথ্য সুরক্ষিত রাখতে, যদি আপনার অ্যাপটি Android 12 (API লেভেল 31) বা তার বেশি ভার্সনের হয়, তাহলে সিস্টেমটি নির্দিষ্ট মোশন সেন্সর এবং পজিশন সেন্সর থেকে ডেটার রিফ্রেশ রেটের উপর একটি সীমা নির্ধারণ করে। এই ডেটাতে ডিভাইসের অ্যাক্সিলোমিটার , জাইরোস্কোপ এবং জিওম্যাগনেটিক ফিল্ড সেন্সর দ্বারা রেকর্ড করা মান অন্তর্ভুক্ত থাকে।
রিফ্রেশ রেট সীমা নির্ভর করে আপনি সেন্সর ডেটা কীভাবে অ্যাক্সেস করেন তার উপর:
-  যদি আপনি সেন্সর ইভেন্টগুলি পর্যবেক্ষণ করার জন্য registerListener()পদ্ধতিটি ব্যবহার করেন, তাহলে সেন্সর স্যাম্পলিং রেট 200 Hz পর্যন্ত সীমাবদ্ধ থাকবে। এটিregisterListener()পদ্ধতির সমস্ত ওভারলোডেড ভেরিয়েন্টের ক্ষেত্রে সত্য।
-  যদি আপনি SensorDirectChannelক্লাস ব্যবহার করেন, তাহলে সেন্সর স্যাম্পলিং রেটRATE_NORMALমধ্যে সীমাবদ্ধ থাকবে, যা সাধারণত প্রায় 50 Hz হয়।
 যদি আপনার অ্যাপের মোশন সেন্সর ডেটা বেশি হারে সংগ্রহ করার প্রয়োজন হয়, তাহলে আপনাকে অবশ্যই HIGH_SAMPLING_RATE_SENSORS অনুমতি ঘোষণা করতে হবে, যেমনটি নিম্নলিখিত কোড স্নিপেটে দেখানো হয়েছে। অন্যথায়, যদি আপনার অ্যাপ এই অনুমতি ঘোষণা না করেই বেশি হারে মোশন সেন্সর ডেটা সংগ্রহ করার চেষ্টা করে, তাহলে একটি SecurityException দেখা দেয়।
অ্যান্ড্রয়েডম্যানিফেস্ট.এক্সএমএল
<manifest ...> <uses-permission android:name="android.permission.HIGH_SAMPLING_RATE_SENSORS"/> <application ...> ... </application> </manifest>
সেন্সর অ্যাক্সেস এবং ব্যবহারের জন্য সেরা অনুশীলন
আপনার সেন্সর বাস্তবায়নের নকশা করার সময়, এই বিভাগে আলোচনা করা নির্দেশিকাগুলি অনুসরণ করতে ভুলবেন না। সেন্সর ফ্রেমওয়ার্ক ব্যবহার করে সেন্সর অ্যাক্সেস এবং সেন্সর ডেটা অর্জনকারী যে কোনও ব্যক্তির জন্য এই নির্দেশিকাগুলি সর্বোত্তম অনুশীলনের সুপারিশ করা হয়েছে।
শুধুমাত্র ফোরগ্রাউন্ডে সেন্সর ডেটা সংগ্রহ করুন
অ্যান্ড্রয়েড ৯ (এপিআই লেভেল ২৮) বা তার বেশি চলমান ডিভাইসগুলিতে, ব্যাকগ্রাউন্ডে চলমান অ্যাপগুলিতে নিম্নলিখিত বিধিনিষেধ রয়েছে:
- অ্যাক্সিলোমিটার এবং জাইরোস্কোপের মতো ক্রমাগত রিপোর্টিং মোড ব্যবহার করে এমন সেন্সরগুলি ইভেন্ট গ্রহণ করে না।
- যেসব সেন্সর অন-চেঞ্জ বা ওয়ান-শট রিপোর্টিং মোড ব্যবহার করে, তারা ইভেন্ট গ্রহণ করে না।
এই বিধিনিষেধগুলি বিবেচনা করে, আপনার অ্যাপটি যখন ফোরগ্রাউন্ডে থাকে অথবা ফোরগ্রাউন্ড পরিষেবার অংশ হিসেবে থাকে তখন সেন্সর ইভেন্টগুলি সনাক্ত করা সবচেয়ে ভালো।
সেন্সর লিসেনারের নিবন্ধন বাতিল করুন
 সেন্সর ব্যবহার শেষ হলে অথবা সেন্সরের কার্যকলাপ বিরতি দিলে সেন্সরের শ্রোতাকে নিবন্ধনমুক্ত করতে ভুলবেন না। যদি সেন্সর শ্রোতা নিবন্ধিত থাকে এবং এর কার্যকলাপ বিরতি দেওয়া হয়, তাহলে সেন্সরটি ডেটা সংগ্রহ করতে থাকবে এবং ব্যাটারি রিসোর্স ব্যবহার করতে থাকবে যতক্ষণ না আপনি সেন্সরটি নিবন্ধনমুক্ত করেন। নিম্নলিখিত কোডটি দেখায় কিভাবে onPause() পদ্ধতি ব্যবহার করে শ্রোতাকে নিবন্ধনমুক্ত করতে হয়: 
কোটলিন
private lateinit var sensorManager: SensorManager ... override fun onPause() { super.onPause() sensorManager.unregisterListener(this) }
জাভা
private SensorManager sensorManager; ... @Override protected void onPause() { super.onPause(); sensorManager.unregisterListener(this); }
 আরও তথ্যের জন্য, unregisterListener(SensorEventListener) দেখুন।
অ্যান্ড্রয়েড এমুলেটর দিয়ে পরীক্ষা করুন
অ্যান্ড্রয়েড এমুলেটরটিতে ভার্চুয়াল সেন্সর নিয়ন্ত্রণের একটি সেট রয়েছে যা আপনাকে অ্যাক্সিলোমিটার, পরিবেষ্টিত তাপমাত্রা, ম্যাগনেটোমিটার, প্রক্সিমিটি, আলো এবং আরও অনেক কিছুর মতো সেন্সর পরীক্ষা করতে দেয়।

এমুলেটরটি এমন একটি অ্যান্ড্রয়েড ডিভাইসের সাথে সংযোগ ব্যবহার করে যা SdkControllerSensor অ্যাপটি চালাচ্ছে। মনে রাখবেন যে এই অ্যাপটি শুধুমাত্র অ্যান্ড্রয়েড 4.0 (API লেভেল 14) বা তার বেশি চলমান ডিভাইসগুলিতে উপলব্ধ। (যদি ডিভাইসটি অ্যান্ড্রয়েড 4.0 চালিত হয়, তবে এতে অবশ্যই Revision 2 ইনস্টল করা থাকতে হবে।) SdkControllerSensor অ্যাপটি ডিভাইসের সেন্সরগুলিতে পরিবর্তনগুলি পর্যবেক্ষণ করে এবং সেগুলি এমুলেটরে প্রেরণ করে। এরপর এমুলেটরটি আপনার ডিভাইসের সেন্সর থেকে প্রাপ্ত নতুন মানের উপর ভিত্তি করে রূপান্তরিত হয়।
আপনি নিম্নলিখিত স্থানে SdkControllerSensor অ্যাপের সোর্স কোড দেখতে পারেন:
$ your-android-sdk-directory/tools/apps/SdkController
আপনার ডিভাইস এবং এমুলেটরের মধ্যে ডেটা স্থানান্তর করতে, এই পদক্ষেপগুলি অনুসরণ করুন:
- আপনার ডিভাইসে USB ডিবাগিং সক্ষম আছে কিনা তা পরীক্ষা করুন।
- একটি USB কেবল ব্যবহার করে আপনার ডিভাইসটিকে আপনার ডেভেলপমেন্ট মেশিনের সাথে সংযুক্ত করুন।
- আপনার ডিভাইসে SdkControllerSensor অ্যাপটি চালু করুন।
- অ্যাপটিতে, আপনি যে সেন্সরগুলি অনুকরণ করতে চান তা নির্বাচন করুন।
- নিম্নলিখিত - adbকমান্ডটি চালান:
- এমুলেটরটি শুরু করুন। এখন আপনার ডিভাইসটি সরানোর মাধ্যমে এমুলেটরটিতে রূপান্তর প্রয়োগ করতে সক্ষম হবেন।
$ adb forward tcp:1968 tcp:1968
 দ্রষ্টব্য: যদি আপনার ফিজিক্যাল ডিভাইসে করা নড়াচড়া এমুলেটরটিকে রূপান্তরিত না করে, তাহলে ধাপ ৫ থেকে আবার adb কমান্ডটি চালানোর চেষ্টা করুন।
আরও তথ্যের জন্য, অ্যান্ড্রয়েড এমুলেটর গাইড দেখুন।
onSensorChanged() পদ্ধতিটি ব্লক করবেন না।
 সেন্সর ডেটা উচ্চ হারে পরিবর্তিত হতে পারে, যার অর্থ সিস্টেমটি প্রায়শই onSensorChanged(SensorEvent) পদ্ধতিটি কল করতে পারে। সর্বোত্তম অনুশীলন হিসাবে, আপনার onSensorChanged(SensorEvent) পদ্ধতিতে যতটা সম্ভব কম কাজ করা উচিত যাতে আপনি এটি ব্লক না করেন। যদি আপনার অ্যাপ্লিকেশনের জন্য আপনাকে কোনও ডেটা ফিল্টারিং বা সেন্সর ডেটা হ্রাস করার প্রয়োজন হয়, তাহলে আপনার সেই কাজটি onSensorChanged(SensorEvent) পদ্ধতির বাইরে করা উচিত। 
অবচিত পদ্ধতি বা সেন্সর প্রকার ব্যবহার করা এড়িয়ে চলুন
 বেশ কিছু পদ্ধতি এবং ধ্রুবক বাতিল করা হয়েছে। বিশেষ করে, TYPE_ORIENTATION সেন্সরের ধরণ বাতিল করা হয়েছে। ওরিয়েন্টেশন ডেটা পেতে আপনার getOrientation() পদ্ধতি ব্যবহার করা উচিত। একইভাবে, TYPE_TEMPERATURE সেন্সরের ধরণ বাতিল করা হয়েছে। Android 4.0 চালিত ডিভাইসগুলিতে আপনার পরিবর্তে TYPE_AMBIENT_TEMPERATURE সেন্সরের ধরণ ব্যবহার করা উচিত।
সেন্সর ব্যবহারের আগে যাচাই করে নিন
কোনও ডিভাইস থেকে তথ্য সংগ্রহ করার চেষ্টা করার আগে সর্বদা যাচাই করে নিন যে কোনও সেন্সর বিদ্যমান কিনা। ধরে নেবেন না যে কোনও সেন্সর কেবল ঘন ঘন ব্যবহৃত সেন্সর বলেই বিদ্যমান। ডিভাইস নির্মাতাদের তাদের ডিভাইসে কোনও নির্দিষ্ট সেন্সর সরবরাহ করার প্রয়োজন নেই।
সেন্সর বিলম্ব সাবধানে নির্বাচন করুন
 যখন আপনি registerListener() পদ্ধতি ব্যবহার করে একটি সেন্সর নিবন্ধন করেন, তখন নিশ্চিত করুন যে আপনি এমন একটি ডেলিভারি রেট বেছে নিয়েছেন যা আপনার অ্যাপ্লিকেশন বা ব্যবহারের ক্ষেত্রে উপযুক্ত। সেন্সরগুলি খুব উচ্চ হারে ডেটা সরবরাহ করতে পারে। সিস্টেমকে অতিরিক্ত ডেটা প্রেরণের অনুমতি দিলে যা আপনার প্রয়োজন হয় না, সিস্টেমের সংস্থান নষ্ট হয় এবং ব্যাটারি শক্তি ব্যবহার করে।
