কম্পিউটার টিউটোরিয়াল

অ্যান্ড্রয়েডে ডিভাইস এয়ারপ্লেন মোডে আছে কিনা যাচাই

অ্যান্ড্রয়েডে এয়ারপ্লেন মোড (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 ডিপ্রিকেটেড)
  1. অ্যান্ড্রয়েড ভয়েসমেইল সমস্যা ফিক্স করুন: ধাপে ধাপে গাইড

  2. অ্যান্ড্রয়েডে WhatsApp ডার্ক মোড ইনেবল করুন – ধাপে ধাপে গাইড

  3. অ্যান্ড্রয়েডের ডু নট ডিস্টার্ব মাস্টার করুন: ফোকাস ও ঘুম বাড়াতে প্রমাণিত টিপস

  4. Google Find My Device দিয়ে হারানো অ্যান্ড্রয়েড ফোন দ্রুত খুঁজুন