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

Android-এ Home Button ওভাররাইড/হ্যান্ডল করার পদ্ধতি

Home Button ওভাররাইড: সীমাবদ্ধতা ও বিকল্প

গুরুত্বপূর্ণ: Android-এ Home Button ওভাররাইড করা যাবে না। এটি সিস্টেম-লেভেল নেভিগেশন কী যা অ্যাপের কন্ট্রোলের বাইরে। তবে onUserLeaveHint() ওভাররাইড করে Home প্রেস ডিটেক্ট করা যায়।

onUserLeaveHint() ব্যবহার

এই মেথড কল হয় যখন ইউজার Home বাটন চাপে বা অন্য অ্যাপে স্যুইচ করে (Activity background-এ চলে जाये)।

ধাপ ১: প্রজেক্ট তৈরি

Android Studio-তে নতুন প্রজেক্ট তৈরি করুন।

ধাপ ২: লেআউট (activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Press Home Button to Test"
        android:textSize="16sp"
        android:textStyle="bold" />
</RelativeLayout>

ধাপ ৩: MainActivity.java

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onUserLeaveHint() {
        // Home Button প্রেস হলে বা অ্যাপ ব্যাকগ্রাউন্ডে যেতে হলে
        Toast.makeText(this, "Home Button Pressed / App Going Background", Toast.LENGTH_SHORT).show();
        super.onUserLeaveHint();
    }
    
    @Override
    protected void onPause() {
        super.onPause();
        // অ্যাপ ব্যাকগ্রাউন্ডে যাওয়ার সময় (Home, Recent Apps, Incoming Call ইত্যাদি)
    }
    
    @Override
    protected void onStop() {
        super.onStop();
        // অ্যাপ সম্পূর্ণ দৃশ্য থেকে ওঝাল
    }
}

ধাপ ৪: AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.homebutton">
    <application ...>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

লাইফসাইকেল сравнение

ইভেন্টonUserLeaveHintonPauseonStop
Home Button✅ কল হয়✅ কল হয়✅ কল হয়
Recent Apps Button❌ নয়✅ কল হয়✅ কল হয়
Incoming Call❌ নয়✅ কল হয়✅ কল হয়
Power Button (Screen Off)❌ নয়✅ কল হয়✅ কল হয়
Back Button (Exit)❌ নয়✅ কল হয়✅ কল হয়

কীভাবে "Home Button ব্লক" করবেন (Workarounds)

১. Kiosk Mode / Lock Task Mode (Enterprise)

// Device Owner অ্যাপ হতে হবে
DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName admin = new ComponentName(this, AdminReceiver.class);
String[] packages = {getPackageName()};
dpm.setLockTaskPackages(admin, packages);
// Activity-এ:
startLockTask();

২. Launcher Activity হিসেবে সেট করুন (Home Screen Replacement)

<activity android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.HOME" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

তবে ইউজারকে ডিফল্ট লঞ্চার বেছে নেওয়ার প্রম্প্ট আসবে।

৩. Accessibility Service (সীমিত)

AccessibilityService-এ GLOBAL_ACTION_HOME ইন্টারসেপ্ট করা সম্ভব কিন্তু জটিল ও ব্যবহারকারীর অনুমতি লাগে।

সেরা অনুশীলন

  • Home Button ওভাররাইড করার চেষ্টা করবেন না - এটি Android ডিজাইন নীতির বিরুদ্ধে
  • onPause()/onStop()-এ ডেটা সেভ, মিডিয়া পজ, নেটওয়ার্ক ডিসকানেক্ট করুন
  • onUserLeaveHint()-এ শুধু UI-রিলেটেড ক্লিনআপ (টুলটিপ হাইড, অ্যানিমেশন স্টপ) করুন
  • ক্যালকুলেটর/গেম অ্যাপে "Exit Confirmation" Back Button-এ দিন, Home-এ না

নিটিক সারামারি: Home Button ইউজারের নিয়ন্ত্রণে থাকা উচিত। অ্যাপ ডেভেলপাররা এটিকে হাইজ্যাক করতে পারবেন না - এটি প্ল্যাটফর্ম নিরাপত্তা ও ইউজার এক্সপেরিয়েন্সের জন্য।

  1. Android-এ লগআউট সময় ব্যাক বাটন ডিজেবল করা

  2. অ্যান্ড্রয়েডে বাটনের কোণাবৃত্তাকার কর্নার তৈরি করার পদ্ধতি

  3. আইফোনে হোম বাটন ফিরিয়ে আনার উপায় (AssistiveTouch ব্যবহার করে)

  4. অ্যান্ড্রয়েডে হোম বাটন দিয়ে ক্যামেরা লঞ্চ করার পদ্ধতি