डायनामिक ब्रॉडकास्ट रिसीवर के साथ कस्टम इंटेंट फिल्टर
इंटेंट फिल्टर Android को बताता है कि कौन से इंटेंट्स एक कंपोनेंट हैंडल कर सकता है। डायनामिक रजिस्ट्रेशन कोड में होता है (मैनिफेस्ट में नहीं), और onPause() में अनरजिस्टर करना जरूरी है।
चरण 1: प्रोजेक्ट बनाएं
Android Studio: File → New Project।
चरण 2: लेआउट (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:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/btnRegister"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="रिसीवर रजिस्टर करें" />
<Button
android:id="@+id/btnSend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="ब्रॉडकास्ट भेजें" />
</LinearLayout>
चरण 3: MainActivity.java - डायनामिक रजिस्ट्रेशन
package com.example.andy.myapplication;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private static final String CUSTOM_ACTION = "com.example.andy.CUSTOM_INTENT";
private BroadcastReceiver customReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnRegister = findViewById(R.id.btnRegister);
Button btnSend = findViewById(R.id.btnSend);
// ब्रॉडकास्ट रिसीवर परिभाषित करें
customReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Toast.makeText(MainActivity.this,
"प्राप्त: " + action, Toast.LENGTH_LONG).show();
}
};
// रजिस्टर बटन
btnRegister.setOnClickListener(v -> {
IntentFilter filter = new IntentFilter(CUSTOM_ACTION);
registerReceiver(customReceiver, filter);
Toast.makeText(this, "रिसीवर रजिस्टर किया गया", Toast.LENGTH_SHORT).show();
});
// ब्रॉडकास्ट भेजें बटन
btnSend.setOnClickListener(v -> {
Intent intent = new Intent(CUSTOM_ACTION);
sendBroadcast(intent);
});
}
@Override
protected void onPause() {
super.onPause();
// लीक रोकने के लिए अनरजिस्टर करें
if (customReceiver != null) {
unregisterReceiver(customReceiver);
}
}
}
मुख्य अवधारणाएं:
- डायनामिक बनाम स्टेटिक: कोड में रजिस्टर = डायनामिक (ऐप चलने पर ही सक्रिय); मैनिफेस्ट में = स्टेटिक (ऐप इंस्टॉल होने पर सक्रिय)।
- लाइफसाइकिल:
onPause()में अनरजिस्टर करें वरना मेमोरी लीक और क्रैश होगा। - कस्टम एक्शन: यूनिक स्ट्रिंग उपयोग करें (पैकेज नाम प्रीफिक्स के साथ)।
- sendBroadcast(): सभी मैचिंग रिसीवर्स को असिंक्रोनसली डिलीवर करता है।
फ्लो:
- "रिसीवर रजिस्टर करें" दबाएं → रिसीवर सक्रिय
- "ब्रॉडकास्ट भेजें" दबाएं → कस्टम इंटेंट ब्रॉडकास्ट होता है
- रिसीवर का
onReceive()कॉल होता है → टोस्ट दिखाता है


सुरक्षा नोट: Android 14+ में एक्सपोर्टेड रिसीवर्स के लिए RECEIVER_EXPORTED/RECEIVER_NOT_EXPORTED फ्लैग्स जरूरी हैं।