অ্যান্ড্রয়েড ডিভাইসে এক্সিলারোমিটার (Accelerometer) সেন্সর সাপোর্ট যাচাই
এই টিউটোরিয়ালে শিখব কিভাবে সবচেয়ে বেসিক এবং সর্বव्यাপী সেন্সর এক্সিলারোমিটার ডিভাইসে উপলব্ধ কিনা তা যাচাই করতে হয়। এটি প্রায় সকল অ্যান্ড্রয়েড ডিভাইসে থাকে।
প্রয়োজনীয় ধাপসমূহ
ধাপ ১: নতুন প্রজেক্ট তৈরি করুন
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 accelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
if (accelerometerSensor != null) {
actionEvent.setText("✓ এক্সিলারোমিটার সমর্থিত\n" +
"নাম: " + accelerometerSensor.getName() + "\n" +
"বেন্ডর: " + accelerometerSensor.getVendor() + "\n" +
"ম্যাক্স রেঞ্জ: ±" + accelerometerSensor.getMaximumRange() + " m/s²\n" +
"রেজোলিউশন: " + accelerometerSensor.getResolution() + " m/s²\n" +
"পাওয়ার: " + accelerometerSensor.getPower() + " mA\n" +
"মিন ডिले: " + accelerometerSensor.getMinDelay() + " μs");
} else {
actionEvent.setText("✗ এক্সিলারোমিটার সমর্থিত নয় (অসাধারণ)");
}
}
}
এক্সিলারোমিটার সেন্সর বিবরণ
| বিষয় | বিস্তারিত |
|---|---|
| সেন্সর টাইপ | Sensor.TYPE_ACCELEROMETER |
| পরিমাপ | ৩-অক্ষে লিনিয়ার ত্বরণ (গ্র্যাভিটি সহ) |
| একক | m/s² (মিটার পার সেকেন্ড স্কোয়ার) |
| API লেভেল | 1 (Android 1.0 থেকে) |
| সাধারণ রেঞ্জ | ±2g, ±4g, ±8g, ±16g (1g = 9.81 m/s²) |
| উপলব্ধতা | ৯৯.৯%+ অ্যান্ড্রয়েড ডিভাইসে |
র ডেটা পড়া
SensorEventListener listener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
float x = event.values[0]; // X-অক্ষ ত্বরণ
float y = event.values[1]; // Y-অক্ষ ত্বরণ
float z = event.values[2]; // Z-অক্ষ ত্বরণ (গ্র্যাভিটি সহ)
// মাত্রা
double magnitude = Math.sqrt(x*x + y*y + z*z); // ~9.81 স্থির অবস্থায়
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
};
sensorManager.registerListener(listener, accelerometerSensor, SensorManager.SENSOR_DELAY_NORMAL);
সেন্সর ডिले রেট
| কনস্ট্যান্ট | ইন্টারভাল | ব্যবহার |
|---|---|---|
| SENSOR_DELAY_NORMAL | ~200,000 μs (5 Hz) | UI রোটেশন, সাধারণ용 |
| SENSOR_DELAY_UI | ~60,000 μs (16 Hz) | UI অ্যানিমেশন |
| SENSOR_DELAY_GAME | ~20,000 μs (50 Hz) | গেমিং |
| SENSOR_DELAY_FASTEST | হার্ডওয়্যার ডিপেন্ডেন্ট | উচ্চ ফ্রিকোয়েন্সি অ্যাপ |
ব্যবহারের ক্ষেত্র
- স্ক্রিন রোটেশন (পোর্ট্রেট/ল্যান্ডস্কেপ)
- শেক ডিটেকশন (অন্ডু, ডাইস রোল)
- স্টেপ কাউন্টার / পেডোমিটার
- ফল ডিটেকশন (বৃদ্ধদের সুরক্ষা)
- গেম কন্ট্রোল (টিল্ট-ভিত্তিক)
- ভাইব্রেশন অ্যানালিসিস
গ্র্যাভিটি কম্পোনেন্ট পৃথক করা
// হাই-পাস ফিল্টার (লিনিয়ার এক্সিলারেশন পাওয়ার ساده পদ্ধতি)
float[] gravity = new float[3];
float alpha = 0.8f;
@Override
public void onSensorChanged(SensorEvent event) {
gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];
float linearX = event.values[0] - gravity[0];
float linearY = event.values[1] - gravity[1];
float linearZ = event.values[2] - gravity[2];
}
অ্যাপ্লিকেশন চালানো
রান করলে প্রায় সকল ডিভাইসে বিস্তারিত স্পেসিফিকেশন সহ "✓ এক্সিলারোমিটার সমর্থিত" দেখাবে।
লক্ষ্য করুন
- এক্সিলারোমিটার সবচেয়ে কম পাওয়ার খরচ করে
- সিস্টেম নিজে ব্যবহার করে (রোটেশন, স্টেপ কাউন্ট) - তাই সবসময় সক্রিয় থাকে
- TYPE_LINEAR_ACCELERATION এবং TYPE_GRAVITY সফ্টওয়্যার সেন্সর এক্সিলারোমিটার থেকে তৈরি