অ্যান্ড্রয়েড ডিভাইসে প্রক্সিমিটি (Proximity) সেন্সর সাপোর্ট যাচাই
এই টিউটোরিয়ালে শিখব কিভাবে SensorManager ব্যবহার করে ডিভাইসে প্রক্সিমিটি সেন্সর উপলব্ধ কিনা তা যাচাই করতে হয়। এটি কল সময় স্ক্রিন অফ করতে বা জেস্ট কন্ট্রোলের জন্য ব্যবহৃত হয়।
প্রয়োজনীয় ধাপসমূহ
ধাপ ১: নতুন প্রজেক্ট তৈরি করুন
Android Studio-তে File → New Project নির্বাচন করে প্রজেক্ট তৈরি করুন।
ধাপ ২: লেআউট ফাইল
res/layout/activity_main.xml ফাইলে:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:gravity="center"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<TextView
android:id="@+id/actionEvent"
android:textSize="40sp"
android:layout_marginTop="30dp"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
</LinearLayout>
ধাপ ৩: জাভা কোড
src/MainActivity.java ফাইলে:
package com.example.myapplication;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private SensorManager sensorManager;
TextView actionEvent;
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
actionEvent = findViewById(R.id.actionEvent);
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
// প্রক্সিমিটি সেন্সর যাচাই
Sensor proximitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
if (proximitySensor != null) {
actionEvent.setText("✓ প্রক্সিমিটি সেন্সর সমর্থিত\n" +
"নাম: " + proximitySensor.getName() + "\n" +
"বেন্ডর: " + proximitySensor.getVendor() + "\n" +
"ম্যাক্স রেঞ্জ: " + proximitySensor.getMaximumRange() + " cm\n" +
"রেজোলিউশন: " + proximitySensor.getResolution() + " cm\n" +
"পাওয়ার: " + proximitySensor.getPower() + " mA");
} else {
actionEvent.setText("✗ প্রক্সিমিটি সেন্সর সমর্থিত নয়");
}
}
}
প্রক্সিমিটি সেন্সর বিবরণ
| বিষয় | বিস্তারিত |
|---|---|
| সেন্সর টাইপ | Sensor.TYPE_PROXIMITY |
| পরিমাপ | নিকটবর্তী বস্তুর দূরত্ব (সেন্টিমিটারে) |
| সাধারণ রেঞ্জ | ০ - ৫ সেমি (বাইনারি: ০ = নিকট, ম্যাক্স = দূর) |
| টেকনোলজি | ইনফ্রা-রেড (IR) LED + ফটোডায়োড |
| অবস্থান | ফ্রন্ট ক্যামেরার নিকট (ইয়ারপিসের উপরে) |
| API লেভেল | 1 (Android 1.0 থেকে) |
প্রক্সিমিটি ডেটা পড়া
SensorEventListener listener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
float distance = event.values[0]; // সেমিতে দূরত্ব
float maxRange = event.sensor.getMaximumRange();
if (distance >= maxRange) {
// দূর - কোনো বস্তু নেই
Log.d("Proximity", "দূর: " + distance + " cm");
} else {
// নিকট - বস্তু সনাক্ত (সাধারণত ০.০ বা খুব ছোট মান)
Log.d("Proximity", "নিকট: " + distance + " cm");
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
};
sensorManager.registerListener(listener, proximitySensor, SensorManager.SENSOR_DELAY_NORMAL);
বাইনারি নেচার (Binary Nature)
অধিকাংশ প্রক্সিমিটি সেন্সর বাইনারি আউটপুট দেয়:
- ০.০ cm (বা খুব ছোট): বস্তু সনাক্ত (নিকট)
- ম্যাক্স রেঞ্জ (সাধারণত ৫.০ cm): বস্তু নেই (দূর)
- মাঝপথের মান সাধারণত নেই
ব্যবহারের ক্ষেত্র
- কল সক্রিয় থাকা অবস্থায় স্ক্রিন অফ (ব্যাটারি বাঁচানো, অণিচ্ছাকৃত টাচ রোধ)
- পকেট মোড (ফোন পকেটে থাকলে লক)
- জেস্ট কন্ট্রোল (হাত ঘুরিয়ে মিউজিক কন্ট্রোল)
- অটো ব্রাইটনেস অ্যাডজাস্টমেন্ট (কিছু ডিভাইসে)
কল স্ক্রিন অফ ইমপ্লিমেন্টেশন (উদাহরণ)
// কল স্টেট মনিটর
PhoneStateListener phoneListener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
if (state == TelephonyManager.CALL_STATE_OFFHOOK) {
// কল শুরু - প্রক্সিমিটি মনিটরিং শুরু
sensorManager.registerListener(proximityListener, proximitySensor,
SensorManager.SENSOR_DELAY_NORMAL);
} else if (state == TelephonyManager.CALL_STATE_IDLE) {
// কল শেষ - মনিটরিং বন্ধ
sensorManager.unregisterListener(proximityListener);
// স্ক্রিন অন করুন (WakeLock রিলিজ)
}
}
};
অ্যাপ্লিকেশন চালানো
রান করলে প্রায় সকল স্মার্টফোনে "✓ প্রক্সিমিটি সেন্সর সমর্থিত" দেখাবে (এটি খুব সাধারণ সেন্সর)। ট্যাবলেটে বা বাজেট ফোনে অনুপস্থিত থাকতে পারে।
লক্ষ্য করুন
- সেন্সর খুব কম পাওয়ার খরচ করে
- বাইনারি আউটপুট - সুনির্দিষ্ট দূরত্ব মাপা যায় না
- কল সময় সিস্টেম স্বয়ংক্রিয়ভাবে ব্যবহার করে (অ্যাপলিকেশন লেভেলে নয়)
- সার্টিফিকেট/স্ক্রিন প্রোটেক্টর সেন্সর ব্লক করতে পারে