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>
লাইফসাইকেল сравнение
| ইভেন্ট | onUserLeaveHint | onPause | onStop |
|---|---|---|---|
| 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 ইউজারের নিয়ন্ত্রণে থাকা উচিত। অ্যাপ ডেভেলপাররা এটিকে হাইজ্যাক করতে পারবেন না - এটি প্ল্যাটফর্ম নিরাপত্তা ও ইউজার এক্সপেরিয়েন্সের জন্য।