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

অ্যান্ড্রয়েডে ডিভাইস এয়ারপ্লেন মোড পরিবর্তন ডিটেক্ট করা

অ্যান্ড্রয়েডে এয়ারপ্লেন মোড পরিবর্তন (Change) ডিটেক্ট করা

এই টিউটোরিয়ালে শিখব কিভাবে `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 airplaneModeChangeReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        textView = findViewById(R.id.text);
        
        // বর্তমান স্ট্যাটস দেখাও
        boolean currentState = isAirplaneModeOn(this);
        textView.setText("বর্তমান: " + (currentState ? "চালু ✈️" : "বন্ধ 📱"));
        
        // পরিবর্তন লিসেনার সেটআপ
        setupChangeListener();
    }
    
    private boolean isAirplaneModeOn(Context context) {
        return Settings.Global.getInt(context.getContentResolver(), 
            Settings.Global.AIRPLANE_MODE_ON, 0) != 0;
    }
    
    private void setupChangeListener() {
        airplaneModeChangeReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                // শুধু এয়ারপ্লেন মোড চেঞ্জ একশন ফিল্টার
                if (Intent.ACTION_AIRPLANE_MODE_CHANGED.equals(intent.getAction())) {
                    boolean newState = intent.getBooleanExtra("state", false);
                    String message = "এয়ারপ্লেন মোড পরিবর্তন হয়েছে: " + (newState ? "চালু ✈️" : "বন্ধ 📱");
                    textView.setText(message);
                    
                    // লগিং
                    Log.d("AirplaneMode", message);
                }
            }
        };
        
        // স্পেসিফিক একশন ফিল্টার (শুধু AIRPLANE_MODE_CHANGED)
        IntentFilter filter = new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED);
        registerReceiver(airplaneModeChangeReceiver, filter);
    }
    
    @Override
    protected void onDestroy() {
        super.onDestroy();
        // অবশ্য আনরেজিস্টার করুন
        if (airplaneModeChangeReceiver != null) {
            unregisterReceiver(airplaneModeChangeReceiver);
        }
    }
}

ACTION_AIRPLANE_MODE_CHANGED ব্রডকাস্ট

  • একশন: `android.intent.action.AIRPLANE_MODE_CHANGED`
  • এক্সট্রা: `state` (boolean) - নতুন স্ট্যাটাস (true = অন, false = অফ)
  • প্রকার: স্টিকি ব্রডকাস্ট নয় (শুধু পরিবর্তনের সময় পাঠানো হয়)
  • পারমিশন: কোনো পারমিশন দরকার নেই

দুই ব্রডকাস্টের পার্থক্য

ব্রডকাস্টএকশন স্ট্রিংউদ্দেশ্য
এয়ারপ্লেন মোড স্ট্যাটাসandroid.intent.action.AIRPLANE_MODEবর্তমান স্ট্যাটাস জানান (সিস্টেম বুটে)
এয়ারপ্লেন মোড চেঞ্জandroid.intent.action.AIRPLANE_MODE_CHANGEDবদলाव ঘটলে নোটিফাই

নোট: আর্টিকেল ১০০৬০৬১২৩৩-এ `AIRPLANE_MODE` ব্যবহার করা হয়েছে, যা কম্প্যাটিবিলিটির জন্য। আধুনিক কোডে `AIRPLANE_MODE_CHANGED` ব্যবহার করুন।

ব্যাকগ্রাউন্ডে লিসেনিং (ম্যানিফেস্ট রেজিস্ট্রেশন)

AndroidManifest.xml-এ:

<receiver android:name=".AirplaneModeChangeReceiver" 
    android:enabled="true" 
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.AIRPLANE_MODE_CHANGED" />
    </intent-filter>
</receiver>

AirplaneModeChangeReceiver.java:

public class AirplaneModeChangeReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (Intent.ACTION_AIRPLANE_MODE_CHANGED.equals(intent.getAction())) {
            boolean isOn = intent.getBooleanExtra("state", false);
            // ব্যাকগ্রাউন্ড টাস্ক: নোটিফিকেশন, লগিং, ওয়ার্কম্যানেজার ট্রিগার
            // UI আপডেট না করুন (অ্যাপ ফোরগ্রাউন্ডে নাও থাকতে পারে)
        }
    }
}

WorkManager দিয়ে ব্যাকগ্রাউন্ড সিঙ্ক (আধুনিক পদ্ধতি)

// রিসিভারে WorkManager এনকিউ
OneTimeWorkRequest syncWork = new OneTimeWorkRequest.Builder(SyncWorker.class)
    .setConstraints(new Constraints.Builder()
        .setRequiredNetworkType(NetworkType.CONNECTED) // এয়ারপ্লেন মোড অফ হলে
        .build())
    .build();
WorkManager.getInstance(context).enqueue(syncWork);

অ্যাপ্লিকেশন চালানো

রান করলে বর্তমান স্ট্যাটাস দেখাবে। কুইক সেটিংস থেকে এয়ারপ্লেন মোড টগল করলে "এয়ারপ্লেন মোড পরিবর্তন হয়েছে: ..." মেসেজ দেখাবে।

লক্ষ্য করুন

  • onDestroy-এ unregisterReceiver() কল করুন (ক্রিটিক্যাল)
  • UI থ্রেডে भরী কাজ না করুন onReceive-এ (ANR রোধ)
  • ব্যাকগ্রাউন্ড কাজের জন্য WorkManager/Service ব্যবহার করুন
  • Android 8+ (API 26+) ইমপ্লিসিট ব্রডকাস্ট রিস্ট্রিকশন - এই একশন مستثনা
  1. অ্যান্ড্রয়েডে গুগল ম্যাপস ইনকগনিটো মোড অন করুন: ধাপে ধাপে গাইড

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

  3. অ্যান্ড্রয়েড অ্যাপের কান্ট্রি অফ অরিজিন ডিসকভার করুন—স্টেপ-বাই-স্টেপ গাইড (২০২২)

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