অ্যান্ড্রয়েডে এয়ারপ্লেন মোড (Airplane Mode) স্ট্যাটাস যাচাই
এই টিউটোরিয়ালে শিখব কিভাবে `BroadcastReceiver` ব্যবহার করে ডিভাইস এয়ারপ্লেন মোডে আছে কিনা তা যাচাই এবং রিয়েল-টাইম পরিবর্তন মনিটর করা যায়।
প্রয়োজনীয় ধাপসমূহ
ধাপ ১: নতুন প্রজেক্ট তৈরি করুন
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">
<TextView
android:id="@+id/text"
android:textSize="30sp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:padding="16dp" />
</LinearLayout>
ধাপ ৩: জাভা কোড (MainActivity.java)
package com.example.myapplication;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
TextView textView;
private BroadcastReceiver airplaneModeReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.text);
// ১. বর্তমান এয়ারপ্লেন মোড স্ট্যাটাস চেক (সেটিংস থেকে)
boolean isAirplaneModeOn = isAirplaneModeOn(this);
updateUI(isAirplaneModeOn);
// ২. ব্রডকাস্ট রিসিভার সেটআপ (রিয়েল-টাইম পরিবর্তন জন্য)
setupAirplaneModeReceiver();
}
// সেটিংস থেকে বর্তমান স্ট্যাটাস পাওয়া (API 17+)
private boolean isAirplaneModeOn(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
return Settings.Global.getInt(context.getContentResolver(),
Settings.Global.AIRPLANE_MODE_ON, 0) != 0;
} else {
// পুরানো API (ডিপ্রিকেটেড)
return Settings.System.getInt(context.getContentResolver(),
Settings.System.AIRPLANE_MODE_ON, 0) != 0;
}
}
private void setupAirplaneModeReceiver() {
airplaneModeReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_AIRPLANE_MODE_CHANGED.equals(intent.getAction())) {
boolean isOn = intent.getBooleanExtra("state", false);
updateUI(isOn);
}
}
};
// ইন্টেন্ট ফিল্টার রেজিস্টার
IntentFilter filter = new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED);
registerReceiver(airplaneModeReceiver, filter);
}
private void updateUI(boolean isOn) {
String status = isOn ? "✈️ এয়ারপ্লেন মোড: চালু" : "📱 এয়ারপ্লেন মোড: বন্ধ";
textView.setText(status);
}
@Override
protected void onDestroy() {
super.onDestroy();
// লিক এভাইড করতে আনরেজিস্টার করুন
if (airplaneModeReceiver != null) {
unregisterReceiver(airplaneModeReceiver);
}
}
}
গুরুত্বপূর্ণ পয়েন্টসমূহ
| বিষয় | বিস্তারিত |
|---|---|
| ব্রডকাস্ট একশন | Intent.ACTION_AIRPLANE_MODE_CHANGED ("android.intent.action.AIRPLANE_MODE") |
| এক্সট্রা ডেটা | intent.getBooleanExtra("state", false) - নতুন স্ট্যাটাস |
| স্ট্যাটিক চেক | Settings.Global.AIRPLANE_MODE_ON (API 17+) |
| পারমিশন | কোনো পারমিশন দরকার নেই (শুধু রিড) |
দুই পদ্ধতির তুলনা
| পদ্ধতি | ব্যবহার | সীমাবদ্ধতা |
|---|---|---|
| Settings.Global.read | বর্তমান স্ট্যাটাস একবার পাওয়া | রিয়েল-টাইম আপডেট না |
| BroadcastReceiver | রিয়েল-টাইম পরিবর্তন লিসেন | অ্যাপ ফোরগ্রাউন্ডে থাকতে হয় (ম্যানিফেস্ট রেজিস্ট্রেশন দরকার ব্যাকগ্রাউন্ডের জন্য) |
ম্যানিফেস্টে রেজিস্টার করা (ব্যাকগ্রাউন্ড লিসেনিং)
<receiver android:name=".AirplaneModeReceiver">
<intent-filter>
<action android:name="android.intent.action.AIRPLANE_MODE_CHANGED" />
</intent-filter>
</receiver>
AirplaneModeReceiver.java আলাদা ক্লাস হিসেবে তৈরি করুন।
এয়ারপ্লেন মোড প্রোগ্রাম্যাটিক্যালি টগল করা (সিস্টেম অ্যাপ মাত্র)
// সাধারণ অ্যাপ থেকে এয়ারপ্লেন মোড পরিবর্তন করা যাবে না (সিকিউরিটি) // শুধু সিস্টেম অ্যাপ বা রুটেড ডিভাইসেই সম্ভব // Settings.Global.putInt(contentResolver, Settings.Global.AIRPLANE_MODE_ON, 1);
ব্যবহারের ক্ষেত্র
- অফলাইন-ফার্স্ট অ্যাপ - নেটওয়ার্ক অনুপস্থিতি ডিটেক্ট
- সিঙ্ক ম্যানেজমেন্ট - এয়ারপ্লেন মোডে সিঙ্ক বন্ধ রাখা
- ব্যাটারি সেভিং - রেডিও অফ থাকলে ব্যাকগ্রাউন্ড টাস্ক বন্ধ
- গেম/মিডিয়া অ্যাপ - অনলাইন ফিচার হাইড করা
অ্যাপ্লিকেশন চালানো
রান করলে বর্তমান এয়ারপ্লেন মোড স্ট্যাটাস দেখাবে। কুইক সেটিংস থেকে এয়ারপ্লেন মোড টগল করলে রিয়েল-টাইম আপডেট হবে।
লক্ষ্য করুন
- onDestroy-এ অবশ্য unregisterReceiver() কল করুন (মেমোরি লিক রোধ)
- Android 8+ (API 26+) এ ইমপ্লিসিট ব্রডকাস্ট রিস্ট্রিকশন - এই ব্রডকাস্ট مستثনা
- ম্যানিফেস্ট রেজিস্ট্রেশন ব্যবহার করলে অ্যাপ বন্ধ থাকলেও কাজ করবে
- Settings.Global.AIRPLANE_MODE_ON API 17+ এ ব্যবহার করুন (System ডিপ্রিকেটেড)