{"id":32143,"date":"2025-10-18T07:40:57","date_gmt":"2025-10-18T04:40:57","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=32143"},"modified":"2025-10-18T07:40:57","modified_gmt":"2025-10-18T04:40:57","slug":"android-broadcastreceiver-ornek-uygulama-ve-detayli-anlatim","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/android-broadcastreceiver-ornek-uygulama-ve-detayli-anlatim\/","title":{"rendered":"Android BroadcastReceiver \u00d6rnek Uygulama ve Detayl\u0131 Anlat\u0131m"},"content":{"rendered":"<p><body><\/p>\n<h2>Android BroadcastReceiver \u00d6rnek Uygulama ve Detayl\u0131 Anlat\u0131m<\/h2>\n<p>Android i\u015fletim sistemi, uygulamalar aras\u0131 ileti\u015fimi ve sistem olaylar\u0131na tepki vermeyi sa\u011flayan g\u00fc\u00e7l\u00fc bile\u015fenler sunar. Bu bile\u015fenlerden biri de <strong>BroadcastReceiver<\/strong>&#8216;d\u0131r. BroadcastReceiver, sistem veya di\u011fer uygulamalar taraf\u0131ndan g\u00f6nderilen &#8220;broadcast&#8221; (yay\u0131n) mesajlar\u0131n\u0131 dinleyen ve bu mesajlara tepki veren bir Android bile\u015fenidir. Bu makalede, BroadcastReceiver&#8217;\u0131n ne oldu\u011funu, nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131, farkl\u0131 kullan\u0131m senaryolar\u0131n\u0131 ve pratik \u00f6rneklerle nas\u0131l uygulanaca\u011f\u0131n\u0131 detayl\u0131 bir \u015fekilde inceleyece\u011fiz.<\/p>\n<h3>BroadcastReceiver Nedir ve Neden Kullan\u0131l\u0131r?<\/h3>\n<p>BroadcastReceiver, Android uygulamalar\u0131n\u0131n sistem genelindeki olaylara (\u00f6rne\u011fin, batarya seviyesinin d\u00fc\u015f\u00fck olmas\u0131, a\u011f ba\u011flant\u0131s\u0131n\u0131n de\u011fi\u015fmesi, cihaz\u0131n a\u00e7\u0131lmas\u0131) veya di\u011fer uygulamalar veya uygulaman\u0131n kendi bile\u015fenleri taraf\u0131ndan g\u00f6nderilen \u00f6zel olaylara yan\u0131t vermesini sa\u011flayan bir mekanizmad\u0131r. Temelde, bir yay\u0131n mesaj\u0131n\u0131 (bir <code>Intent<\/code> nesnesi olarak) dinler ve bu mesaja kar\u015f\u0131l\u0131k gelen bir eylem ger\u00e7ekle\u015ftirir.<\/p>\n<p>Peki, BroadcastReceiver neden bu kadar \u00f6nemlidir?<\/p>\n<p>*   <strong>Sistem Olaylar\u0131na Tepki Verme:<\/strong> Cihaz\u0131n \u015farj durumundaki de\u011fi\u015fiklikler, SMS al\u0131nmas\u0131, cihaz\u0131n yeniden ba\u015flat\u0131lmas\u0131 gibi kritik sistem olaylar\u0131 hakk\u0131nda uygulaman\u0131z\u0131 bilgilendirir.<br \/>\n*   <strong>Uygulama \u0130\u00e7i \u0130leti\u015fim:<\/strong> Uygulaman\u0131z\u0131n farkl\u0131 bile\u015fenleri (Activity&#8217;ler, Service&#8217;ler) aras\u0131nda gev\u015fek bir \u015fekilde ba\u011fl\u0131 ileti\u015fim kurman\u0131n bir yolunu sunar. \u00d6rne\u011fin, bir servis arka planda bir i\u015flem tamamlad\u0131\u011f\u0131nda, bir Activity&#8217;yi bilgilendirmek i\u00e7in bir yay\u0131n g\u00f6nderebilir.<br \/>\n*   <strong>Uygulamalar Aras\u0131 \u0130leti\u015fim:<\/strong> Di\u011fer uygulamalar\u0131n g\u00f6nderdi\u011fi yay\u0131nlar\u0131 dinleyebilir veya kendi \u00f6zel yay\u0131nlar\u0131n\u0131z\u0131 di\u011fer uygulamalar\u0131n dinlemesi i\u00e7in g\u00f6nderebilirsiniz (uygun izinlerle).<\/p>\n<p>BroadcastReceiver&#8217;lar, genellikle k\u0131sa s\u00fcreli i\u015flemler i\u00e7in tasarlanm\u0131\u015ft\u0131r. <code>onReceive()<\/code> metodu i\u00e7inde uzun s\u00fcreli veya yo\u011fun i\u015flemler yapmak, uygulaman\u0131n ANR (Application Not Responding) hatas\u0131 vermesine neden olabilir. Uzun s\u00fcreli i\u015flemler i\u00e7in <code>Service<\/code> veya <code>WorkManager<\/code> gibi bile\u015fenlerin kullan\u0131lmas\u0131 \u00f6nerilir.<\/p>\n<h3>Temel Kavramlar<\/h3>\n<p>BroadcastReceiver&#8217;\u0131 anlamak i\u00e7in birka\u00e7 temel kavram\u0131 bilmek faydal\u0131d\u0131r:<\/p>\n<h4>Yay\u0131n (Broadcast)<\/h4>\n<p>Bir yay\u0131n, asl\u0131nda bir <code>Intent<\/code> nesnesidir. Ancak bu <code>Intent<\/code>, bir <code>Activity<\/code> ba\u015flatmak veya bir <code>Service<\/code>&#8216;i ba\u015flatmak yerine, sistemdeki t\u00fcm ilgili BroadcastReceiver&#8217;lara g\u00f6nderilir. Bu <code>Intent<\/code> nesnesi, yay\u0131n hakk\u0131nda bilgi ta\u015f\u0131r; \u00f6rne\u011fin, hangi eylemin ger\u00e7ekle\u015fti\u011fini (<code>action<\/code>) ve bu eylemle ilgili ek verileri (<code>extras<\/code>).<\/p>\n<h4>Yay\u0131n G\u00f6nderen (Sender)<\/h4>\n<p>Yay\u0131n g\u00f6nderen, bir <code>Intent<\/code> nesnesi olu\u015fturup bunu sistem genelinde yay\u0131nlayan bile\u015fendir. Bu bir sistem bile\u015feni (\u00f6rne\u011fin, batarya seviyesi de\u011fi\u015fti\u011finde), uygulaman\u0131z\u0131n bir Activity&#8217;si veya bir Service&#8217;i olabilir.<\/p>\n<h4>Yay\u0131n Al\u0131c\u0131 (Receiver)<\/h4>\n<p>Yay\u0131n al\u0131c\u0131, <code>BroadcastReceiver<\/code> s\u0131n\u0131f\u0131ndan t\u00fcretilmi\u015f bir s\u0131n\u0131ft\u0131r. Bu s\u0131n\u0131f\u0131n ana g\u00f6revi, <code>onReceive()<\/code> metodunu uygulayarak belirli yay\u0131nlar\u0131 dinlemek ve bu yay\u0131nlar al\u0131nd\u0131\u011f\u0131nda gerekli i\u015flemleri yapmakt\u0131r.<\/p>\n<h4>Yay\u0131n T\u00fcrleri<\/h4>\n<p>Android&#8217;de farkl\u0131 yay\u0131n t\u00fcrleri bulunur:<\/p>\n<p>*   <strong>Normal Yay\u0131nlar (Normal Broadcasts):<\/strong> Asenkron olarak g\u00f6nderilir. T\u00fcm al\u0131c\u0131lar ayn\u0131 anda ve herhangi bir s\u0131rayla <code>onReceive()<\/code> metodunu \u00e7a\u011f\u0131r\u0131r. Al\u0131c\u0131lar yay\u0131n\u0131 durduramaz veya yay\u0131ndaki veriyi de\u011fi\u015ftiremez. <code>sendBroadcast()<\/code> metodu ile g\u00f6nderilir.<br \/>\n*   <strong>S\u0131ral\u0131 Yay\u0131nlar (Ordered Broadcasts):<\/strong> Senkron olarak g\u00f6nderilir. Yay\u0131nlar, \u00f6nceden tan\u0131mlanm\u0131\u015f bir s\u0131raya g\u00f6re tek tek al\u0131c\u0131lara ula\u015f\u0131r. Her al\u0131c\u0131 yay\u0131n\u0131 i\u015fledikten sonra, bir sonraki al\u0131c\u0131ya ge\u00e7ilir. Bir al\u0131c\u0131 yay\u0131n\u0131 durdurabilir (<code>abortBroadcast()<\/code>) veya yay\u0131ndaki veriyi de\u011fi\u015ftirebilir. <code>sendOrderedBroadcast()<\/code> metodu ile g\u00f6nderilir.<br \/>\n*   <strong>Yerel Yay\u0131nlar (Local Broadcasts):<\/strong> <code>LocalBroadcastManager<\/code> kullan\u0131larak g\u00f6nderilen yay\u0131nlard\u0131r. Bu yay\u0131nlar, uygulaman\u0131z\u0131n kendi s\u0131n\u0131rlar\u0131 i\u00e7inde kal\u0131r ve di\u011fer uygulamalar taraf\u0131ndan al\u0131namaz. Bu, g\u00fcvenlik ve performans a\u00e7\u0131s\u0131ndan avantaj sa\u011flar, \u00e7\u00fcnk\u00fc yay\u0131nlar sistem genelinde dola\u015fmaz ve uygulaman\u0131z\u0131n di\u011fer bile\u015fenleri aras\u0131nda daha g\u00fcvenli ve verimli bir ileti\u015fim sa\u011flar.<\/p>\n<h3>BroadcastReceiver Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h3>\n<p>Bir BroadcastReceiver&#8217;\u0131n temel \u00e7al\u0131\u015fma prensibi olduk\u00e7a basittir:<\/p>\n<p>1.  <strong>Kay\u0131t:<\/strong> Bir BroadcastReceiver, belirli yay\u0131nlar\u0131 dinlemek \u00fczere sisteme kaydedilir. Bu kay\u0131t i\u015flemi statik (AndroidManifest.xml \u00fczerinden) veya dinamik (kod \u00fczerinden) olabilir.<br \/>\n2.  <strong>Yay\u0131n G\u00f6nderme:<\/strong> Bir olay ger\u00e7ekle\u015fti\u011finde (\u00f6rne\u011fin, sistem bir a\u011f de\u011fi\u015fikli\u011fi alg\u0131lad\u0131\u011f\u0131nda veya uygulaman\u0131z \u00f6zel bir olay tetikledi\u011finde), bir <code>Intent<\/code> nesnesi olu\u015fturulur ve yay\u0131nlan\u0131r.<br \/>\n3.  <strong>Yay\u0131n Alma:<\/strong> Sistem, yay\u0131nlanan <code>Intent<\/code>&#8216;i al\u0131r ve bu <code>Intent<\/code>&#8216;e uygun \u015fekilde kaydedilmi\u015f t\u00fcm BroadcastReceiver&#8217;lar\u0131 tespit eder.<br \/>\n4.  <strong><code>onReceive()<\/code> Metodu:<\/strong> Tespit edilen her BroadcastReceiver&#8217;\u0131n <code>onReceive(Context context, Intent intent)<\/code> metodu \u00e7a\u011fr\u0131l\u0131r. Bu metod i\u00e7inde, yay\u0131nlanan <code>Intent<\/code>&#8216;in i\u00e7eri\u011fi (action, extras vb.) kontrol edilerek gerekli i\u015flemler yap\u0131l\u0131r.<\/p>\n<p><code>onReceive()<\/code> metodu, UI thread&#8217;inde \u00e7al\u0131\u015ft\u0131\u011f\u0131 i\u00e7in bu metod i\u00e7inde uzun s\u00fcreli veya bloklay\u0131c\u0131 i\u015flemler yapmaktan ka\u00e7\u0131nmak \u00e7ok \u00f6nemlidir. E\u011fer uzun s\u00fcreli bir i\u015flem gerekiyorsa, bu i\u015flem bir <code>Service<\/code>&#8216;e devredilmelidir.<\/p>\n<h3>BroadcastReceiver Kullan\u0131m Senaryolar\u0131<\/h3>\n<p>BroadcastReceiver&#8217;lar \u00e7e\u015fitli senaryolarda hayat kurtar\u0131c\u0131 olabilir:<\/p>\n<p>*   <strong>A\u011f Ba\u011flant\u0131s\u0131 De\u011fi\u015fiklikleri:<\/strong> Cihaz\u0131n Wi-Fi veya mobil veri ba\u011flant\u0131s\u0131n\u0131n kesilmesi\/kurulmas\u0131 durumunda uygulaman\u0131z\u0131n buna g\u00f6re davranmas\u0131n\u0131 sa\u011flamak.<br \/>\n*   <strong>Batarya Durumu:<\/strong> Batarya seviyesinin kritik seviyelere d\u00fc\u015fmesi veya \u015farj cihaz\u0131n\u0131n tak\u0131lmas\u0131\/\u00e7\u0131kar\u0131lmas\u0131 gibi durumlarda bildirim g\u00f6stermek veya belirli i\u015flemleri durdurmak.<br \/>\n*   <strong>Cihaz Ba\u015flatma (Boot Completed):<\/strong> Cihaz a\u00e7\u0131ld\u0131\u011f\u0131nda uygulaman\u0131z\u0131n belirli bir servisi ba\u015flatmas\u0131 veya ilk kurulum i\u015flemlerini yapmas\u0131.<br \/>\n*   <strong>SMS veya \u00c7a\u011fr\u0131 Al\u0131m\u0131:<\/strong> Gelen SMS&#8217;leri veya \u00e7a\u011fr\u0131lar\u0131 dinleyerek uygulaman\u0131z\u0131n \u00f6zel bir tepki vermesi (Android 4.4&#8217;ten itibaren SMS al\u0131m\u0131 i\u00e7in varsay\u0131lan SMS uygulamas\u0131 olma gereksinimi gibi k\u0131s\u0131tlamalar mevcuttur).<br \/>\n*   <strong>Uygulama \u0130\u00e7i Bildirimler:<\/strong> Uygulaman\u0131z\u0131n bir b\u00f6l\u00fcm\u00fcnde ger\u00e7ekle\u015fen bir olay\u0131n (\u00f6rne\u011fin, bir indirme i\u015fleminin tamamlanmas\u0131) di\u011fer bir b\u00f6l\u00fcm\u00fcne (\u00f6rne\u011fin, bir Activity&#8217;ye) bildirilmesi.<br \/>\n*   <strong>Takvim Etkinlikleri:<\/strong> Takvimdeki bir etkinli\u011fin ba\u015flamas\u0131 gibi durumlar\u0131 dinlemek.<\/p>\n<h3>BroadcastReceiver Olu\u015fturma ve Kaydetme<\/h3>\n<p>BroadcastReceiver&#8217;\u0131 kullanmak i\u00e7in \u00f6ncelikle bir s\u0131n\u0131f olu\u015fturman\u0131z ve ard\u0131ndan bu al\u0131c\u0131y\u0131 sisteme kaydetmeniz gerekir. Kay\u0131t i\u015flemi iki farkl\u0131 \u015fekilde yap\u0131labilir: statik (manifest \u00fczerinden) ve dinamik (kod \u00fczerinden).<\/p>\n<h4>A. Statik Kay\u0131t (Manifest-declared Receiver)<\/h4>\n<p>Statik olarak kaydedilen BroadcastReceiver&#8217;lar, uygulaman\u0131z \u00e7al\u0131\u015fm\u0131yor olsa bile belirli sistem yay\u0131nlar\u0131n\u0131 dinleyebilirler. \u00d6rne\u011fin, cihaz a\u00e7\u0131ld\u0131\u011f\u0131nda \u00e7al\u0131\u015fan bir al\u0131c\u0131, bu \u015fekilde kaydedilmelidir.<\/p>\n<p><strong>Ad\u0131mlar:<\/strong><\/p>\n<p>1.  <strong><code>BroadcastReceiver<\/code> S\u0131n\u0131f\u0131 Olu\u015fturma:<\/strong><br \/>\n    <code>BroadcastReceiver<\/code> s\u0131n\u0131f\u0131ndan t\u00fcreyen bir s\u0131n\u0131f olu\u015fturun ve <code>onReceive()<\/code> metodunu uygulay\u0131n.<\/p>\n<pre><code class=\"language-java\">\/\/ MyStaticReceiver.java\n    package com.example.mybroadcastapp;\n\n    import android.content.BroadcastReceiver;\n    import android.content.Context;\n    import android.content.Intent;\n    import android.util.Log;\n    import android.widget.Toast;\n\n    public class MyStaticReceiver extends BroadcastReceiver {\n        private static final String TAG = \"MyStaticReceiver\";\n\n        @Override\n        public void onReceive(Context context, Intent intent) {\n            \/\/ Yay\u0131n geldi\u011finde yap\u0131lacak i\u015flemler burada tan\u0131mlan\u0131r.\n            \/\/ Bu metod UI thread'inde \u00e7al\u0131\u015ft\u0131\u011f\u0131 i\u00e7in uzun s\u00fcreli i\u015flemlerden ka\u00e7\u0131n\u0131lmal\u0131d\u0131r.\n            if (intent != null) {\n                String action = intent.getAction();\n                if (Intent.ACTION_BOOT_COMPLETED.equals(action)) {\n                    \/\/ Cihaz ba\u015flat\u0131ld\u0131\u011f\u0131nda\n                    Log.d(TAG, \"Cihaz ba\u015flat\u0131ld\u0131! Statik al\u0131c\u0131 tetiklendi.\");\n                    Toast.makeText(context, \"Cihaz ba\u015flat\u0131ld\u0131!\", Toast.LENGTH_LONG).show();\n                    \/\/ Burada bir servis ba\u015flat\u0131labilir veya ilk kurulumlar yap\u0131labilir.\n                } else if (Intent.ACTION_POWER_CONNECTED.equals(action)) {\n                    \/\/ \u015earj cihaz\u0131 tak\u0131ld\u0131\u011f\u0131nda\n                    Log.d(TAG, \"\u015earj cihaz\u0131 tak\u0131ld\u0131! Statik al\u0131c\u0131 tetiklendi.\");\n                    Toast.makeText(context, \"\u015earj cihaz\u0131 tak\u0131ld\u0131!\", Toast.LENGTH_SHORT).show();\n                } else if (Intent.ACTION_POWER_DISCONNECTED.equals(action)) {\n                    \/\/ \u015earj cihaz\u0131 \u00e7\u0131kar\u0131ld\u0131\u011f\u0131nda\n                    Log.d(TAG, \"\u015earj cihaz\u0131 \u00e7\u0131kar\u0131ld\u0131! Statik al\u0131c\u0131 tetiklendi.\");\n                    Toast.makeText(context, \"\u015earj cihaz\u0131 \u00e7\u0131kar\u0131ld\u0131!\", Toast.LENGTH_SHORT).show();\n                }\n            }\n        }\n    }<\/code><\/pre>\n<p>2.  <strong><code>AndroidManifest.xml<\/code> Dosyas\u0131nda Bildirme:<\/strong><br \/>\n    <code>AndroidManifest.xml<\/code> dosyas\u0131na <code><receiver><\/code> etiketi ekleyerek al\u0131c\u0131n\u0131z\u0131 bildirin ve dinleyece\u011fi yay\u0131nlar\u0131 <code><intent-filter><\/code> etiketi ile belirtin. Gerekli izinleri de eklemeyi unutmay\u0131n.<\/p>\n<pre><code class=\"language-xml\"><!-- AndroidManifest.xml -->\n    <manifest xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n        package=\"com.example.mybroadcastapp\">\n\n        <!-- Cihaz ba\u015flat\u0131ld\u0131\u011f\u0131nda BroadcastReceiver'\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in izin -->\n        <uses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\" \/>\n\n        <application\n            android:allowBackup=\"true\"\n            android:icon=\"@mipmap\/ic_launcher\"\n            android:label=\"@string\/app_name\"\n            android:roundIcon=\"@mipmap\/ic_launcher_round\"\n            android:supportsRtl=\"true\"\n            android:theme=\"@style\/Theme.MyBroadcastApp\">\n\n            <activity android:name=\".MainActivity\">\n                <intent-filter>\n                    <action android:name=\"android.intent.action.MAIN\" \/>\n                    <category android:name=\"android.intent.category.LAUNCHER\" \/>\n                <\/intent-filter>\n            <\/activity>\n\n            <!-- Statik BroadcastReceiver bildirimi -->\n            <receiver\n                android:name=\".MyStaticReceiver\"\n                android:enabled=\"true\"\n                android:exported=\"true\"> <!-- Android 12+ i\u00e7in exported attribute'u \u00f6nemlidir -->\n                <intent-filter>\n                    <action android:name=\"android.intent.action.BOOT_COMPLETED\" \/>\n                    <action android:name=\"android.intent.action.ACTION_POWER_CONNECTED\" \/>\n                    <action android:name=\"android.intent.action.ACTION_POWER_DISCONNECTED\" \/>\n                <\/intent-filter>\n            <\/receiver>\n\n        <\/application>\n    <\/manifest><\/code><\/pre>\n<p>    *   <code>android:enabled=\"true\"<\/code>: Al\u0131c\u0131n\u0131n etkin oldu\u011funu belirtir.<br \/>\n    *   <code>android:exported=\"true\"<\/code>: Di\u011fer uygulamalar\u0131n bu al\u0131c\u0131ya yay\u0131n g\u00f6ndermesine veya bu al\u0131c\u0131n\u0131n di\u011fer uygulamalar\u0131n yay\u0131nlar\u0131n\u0131 dinlemesine izin verir. Android 12 (API 31) ve sonras\u0131 i\u00e7in, <code>intent-filter<\/code> tan\u0131mlayan bir <code><receiver><\/code> veya <code><service><\/code> \u00f6\u011fesi i\u00e7in <code>android:exported<\/code> a\u00e7\u0131k\u00e7a belirtilmelidir. E\u011fer sadece uygulaman\u0131z i\u00e7i yay\u0131nlar\u0131 dinleyecekse <code>false<\/code> olarak ayarlanmal\u0131d\u0131r.<br \/>\n    *   <code><intent-filter><\/code>: Al\u0131c\u0131n\u0131n hangi yay\u0131nlar\u0131 dinleyece\u011fini belirler. <code>android:name<\/code> \u00f6zelli\u011fi, dinlenecek yay\u0131n\u0131n eylemini belirtir.<\/p>\n<p><strong>\u00d6nemli Not:<\/strong> Android 8.0 (API 26) ve \u00fczeri s\u00fcr\u00fcmlerde, arka plan uygulamalar\u0131n\u0131n \u00e7o\u011fu \u00f6rt\u00fck yay\u0131nlar\u0131 (implicit broadcasts) dinlemesi k\u0131s\u0131tlanm\u0131\u015ft\u0131r. Yani, uygulaman\u0131z arka plandayken manifest&#8217;te beyan etti\u011finiz bir\u00e7ok sistem yay\u0131n\u0131 art\u0131k tetiklenmeyebilir. Ancak <code>BOOT_COMPLETED<\/code>, <code>ACTION_POWER_CONNECTED<\/code> gibi baz\u0131 istisnalar hala \u00e7al\u0131\u015f\u0131r.<\/p>\n<h4>B. Dinamik Kay\u0131t (Context-registered Receiver)<\/h4>\n<p>Dinamik olarak kaydedilen BroadcastReceiver&#8217;lar, genellikle bir Activity veya Service&#8217;in ya\u015fam d\u00f6ng\u00fcs\u00fcne ba\u011fl\u0131d\u0131r. Bu al\u0131c\u0131lar, yaln\u0131zca kaydedildikleri bile\u015fen aktifken yay\u0131nlar\u0131 dinler ve bile\u015fen durduruldu\u011funda kayd\u0131 silinmelidir. Bu, kaynak y\u00f6netimini optimize etmenin ve bellek s\u0131z\u0131nt\u0131lar\u0131n\u0131 \u00f6nlemenin iyi bir yoludur.<\/p>\n<p><strong>Ad\u0131mlar:<\/strong><\/p>\n<p>1.  <strong><code>BroadcastReceiver<\/code> S\u0131n\u0131f\u0131 Olu\u015fturma:<\/strong><br \/>\n    Yine <code>BroadcastReceiver<\/code> s\u0131n\u0131f\u0131ndan t\u00fcreyen bir s\u0131n\u0131f olu\u015fturun.<\/p>\n<pre><code class=\"language-java\">\/\/ MyDynamicReceiver.java\n    package com.example.mybroadcastapp;\n\n    import android.content.BroadcastReceiver;\n    import android.content.Context;\n    import android.content.Intent;\n    import android.util.Log;\n    import android.widget.Toast;\n\n    public class MyDynamicReceiver extends BroadcastReceiver {\n        private static final String TAG = \"MyDynamicReceiver\";\n        public static final String CUSTOM_ACTION = \"com.example.mybroadcastapp.CUSTOM_ACTION\";\n\n        @Override\n        public void onReceive(Context context, Intent intent) {\n            if (intent != null) {\n                String action = intent.getAction();\n                if (action != null) {\n                    if (CUSTOM_ACTION.equals(action)) {\n                        String message = intent.getStringExtra(\"message\");\n                        Log.d(TAG, \"\u00d6zel yay\u0131n al\u0131nd\u0131: \" + message);\n                        Toast.makeText(context, \"\u00d6zel Yay\u0131n: \" + message, Toast.LENGTH_SHORT).show();\n                    } else if (Intent.ACTION_AIRPLANE_MODE_CHANGED.equals(action)) {\n                        boolean isAirplaneModeOn = intent.getBooleanExtra(\"state\", false);\n                        Log.d(TAG, \"U\u00e7ak modu de\u011fi\u015fti: \" + isAirplaneModeOn);\n                        Toast.makeText(context, \"U\u00e7ak Modu: \" + (isAirplaneModeOn ? \"A\u00e7\u0131k\" : \"Kapal\u0131\"), Toast.LENGTH_SHORT).show();\n                    }\n                }\n            }\n        }\n    }<\/code><\/pre>\n<p>2.  <strong>Kod \u00dczerinden Kaydetme ve Kayd\u0131 Silme:<\/strong><br \/>\n    Bir <code>Activity<\/code> veya <code>Service<\/code> i\u00e7inde, <code>onCreate()<\/code> veya <code>onResume()<\/code> gibi ya\u015fam d\u00f6ng\u00fcs\u00fc metotlar\u0131nda al\u0131c\u0131y\u0131 kaydedin ve <code>onDestroy()<\/code> veya <code>onPause()<\/code> gibi metotlarda kayd\u0131n\u0131 silin.<\/p>\n<pre><code class=\"language-java\">\/\/ MainActivity.java\n    package com.example.mybroadcastapp;\n\n    import androidx.appcompat.app.AppCompatActivity;\n    import android.content.Intent;\n    import android.content.IntentFilter;\n    import android.os.Bundle;\n    import android.view.View;\n    import android.widget.Button;\n    import android.widget.Toast;\n\n    public class MainActivity extends AppCompatActivity {\n\n        private MyDynamicReceiver myDynamicReceiver;\n        private Button sendCustomBroadcastButton;\n\n        @Override\n        protected void onCreate(Bundle savedInstanceState) {\n            super.onCreate(savedInstanceState);\n            setContentView(R.layout.activity_main);\n\n            \/\/ Dinamik al\u0131c\u0131 \u00f6rne\u011fini olu\u015ftur\n            myDynamicReceiver = new MyDynamicReceiver();\n\n            \/\/ \u00d6zel yay\u0131n g\u00f6nderme butonu\n            sendCustomBroadcastButton = findViewById(R.id.sendCustomBroadcastButton);\n            sendCustomBroadcastButton.setOnClickListener(new View.OnClickListener() {\n                @Override\n                public void onClick(View v) {\n                    sendMyCustomBroadcast();\n                }\n            });\n        }\n\n        @Override\n        protected void onResume() {\n            super.onResume();\n            \/\/ Activity aktif oldu\u011funda dinamik al\u0131c\u0131y\u0131 kaydet\n            IntentFilter filter = new IntentFilter();\n            filter.addAction(MyDynamicReceiver.CUSTOM_ACTION); \/\/ Kendi \u00f6zel yay\u0131n\u0131m\u0131z\n            filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED); \/\/ U\u00e7ak modu de\u011fi\u015fimi\n            registerReceiver(myDynamicReceiver, filter);\n            Toast.makeText(this, \"Dinamik al\u0131c\u0131 kaydedildi.\", Toast.LENGTH_SHORT).show();\n        }\n\n        @Override\n        protected void onPause() {\n            super.onPause();\n            \/\/ Activity duraklat\u0131ld\u0131\u011f\u0131nda dinamik al\u0131c\u0131n\u0131n kayd\u0131n\u0131 sil\n            unregisterReceiver(myDynamicReceiver);\n            Toast.makeText(this, \"Dinamik al\u0131c\u0131 kayd\u0131 silindi.\", Toast.LENGTH_SHORT).show();\n        }\n\n        private void sendMyCustomBroadcast() {\n            Intent intent = new Intent(MyDynamicReceiver.CUSTOM_ACTION);\n            intent.putExtra(\"message\", \"Merhaba, bu \u00f6zel bir yay\u0131n!\");\n            sendBroadcast(intent);\n            Toast.makeText(this, \"\u00d6zel yay\u0131n g\u00f6nderildi.\", Toast.LENGTH_SHORT).show();\n        }\n    }<\/code><\/pre>\n<p>    *   <code>registerReceiver(BroadcastReceiver receiver, IntentFilter filter)<\/code>: Belirtilen al\u0131c\u0131y\u0131, filtredeki eylemler i\u00e7in kaydeder.<br \/>\n    *   <code>unregisterReceiver(BroadcastReceiver receiver)<\/code>: Kaydedilmi\u015f al\u0131c\u0131n\u0131n kayd\u0131n\u0131 siler. Bu, bellek s\u0131z\u0131nt\u0131lar\u0131n\u0131 \u00f6nlemek i\u00e7in hayati \u00f6neme sahiptir. <code>registerReceiver<\/code> \u00e7a\u011fr\u0131s\u0131 yap\u0131lan her yerde, ilgili bir <code>unregisterReceiver<\/code> \u00e7a\u011fr\u0131s\u0131 yap\u0131lmal\u0131d\u0131r.<\/p>\n<p>    <code>activity_main.xml<\/code> i\u00e7eri\u011fi:<\/p>\n<pre><code class=\"language-xml\"><!-- activity_main.xml -->\n    <?xml version=\"1.0\" encoding=\"utf-8\"?>\n    <LinearLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n        xmlns:app=\"http:\/\/schemas.android.com\/apk\/res-auto\"\n        xmlns:tools=\"http:\/\/schemas.android.com\/tools\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\"\n        android:padding=\"16dp\"\n        android:gravity=\"center\"\n        tools:context=\".MainActivity\">\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"BroadcastReceiver \u00d6rnek Uygulamas\u0131\"\n            android:textSize=\"20sp\"\n            android:textStyle=\"bold\"\n            android:layout_marginBottom=\"32dp\"\/>\n\n        <Button\n            android:id=\"@+id\/sendCustomBroadcastButton\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"\u00d6zel Yay\u0131n G\u00f6nder\"\n            android:layout_marginBottom=\"16dp\"\/>\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"U\u00e7ak modunu a\u00e7\u0131p kapatarak dinamik al\u0131c\u0131n\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6zlemleyin.\"\n            android:textAlignment=\"center\"\n            android:layout_marginTop=\"16dp\"\/>\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"Cihaz\u0131 yeniden ba\u015flatarak veya \u015farj tak\u0131p \u00e7\u0131kararak statik al\u0131c\u0131n\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6zlemleyin.\"\n            android:textAlignment=\"center\"\n            android:layout_marginTop=\"16dp\"\/>\n\n    <\/LinearLayout><\/code><\/pre>\n<h3>Broadcast G\u00f6nderme<\/h3>\n<p>Kendi \u00f6zel yay\u0131nlar\u0131n\u0131z\u0131 g\u00f6ndermek, uygulaman\u0131z\u0131n farkl\u0131 bile\u015fenleri aras\u0131nda veya di\u011fer uygulamalarla ileti\u015fim kurmak i\u00e7in \u00f6nemlidir.<\/p>\n<h4>A. Standart Broadcast G\u00f6nderme<\/h4>\n<p>Yukar\u0131daki <code>MainActivity<\/code> \u00f6rne\u011finde zaten bir \u00f6zel yay\u0131n g\u00f6nderme \u00f6rne\u011fi bulunmaktad\u0131r:<\/p>\n<pre><code class=\"language-java\">private void sendMyCustomBroadcast() {\n    Intent intent = new Intent(MyDynamicReceiver.CUSTOM_ACTION);\n    intent.putExtra(\"message\", \"Merhaba, bu \u00f6zel bir yay\u0131n!\");\n    sendBroadcast(intent); \/\/ Normal (asenkron) yay\u0131n g\u00f6nderme\n    Toast.makeText(this, \"\u00d6zel yay\u0131n g\u00f6nderildi.\", Toast.LENGTH_SHORT).show();\n}<\/code><\/pre>\n<p>*   <code>sendBroadcast(Intent intent)<\/code>: Yay\u0131n\u0131 t\u00fcm ilgili al\u0131c\u0131lara asenkron olarak g\u00f6nderir.<br \/>\n*   <code>sendOrderedBroadcast(Intent intent, String receiverPermission)<\/code>: Yay\u0131n\u0131 belirli bir s\u0131raya g\u00f6re al\u0131c\u0131lara g\u00f6nderir. <code>receiverPermission<\/code> parametresi, yay\u0131n\u0131 alacak al\u0131c\u0131lar\u0131n sahip olmas\u0131 gereken bir izni belirtir. Bu, yay\u0131n\u0131n\u0131z\u0131n yetkisiz al\u0131c\u0131lar taraf\u0131ndan al\u0131nmas\u0131n\u0131 engellemek i\u00e7in bir g\u00fcvenlik katman\u0131 sa\u011flar.<\/p>\n<h4>B. Yerel Broadcast G\u00f6nderme (LocalBroadcastManager)<\/h4>\n<p><code>LocalBroadcastManager<\/code>, uygulaman\u0131z\u0131n kendi s\u0131n\u0131rlar\u0131 i\u00e7inde yay\u0131n g\u00f6ndermek ve almak i\u00e7in kullan\u0131lan bir yard\u0131mc\u0131 s\u0131n\u0131ft\u0131r. Bu, sistem genelindeki yay\u0131nlardan daha g\u00fcvenli ve verimlidir, \u00e7\u00fcnk\u00fc yay\u0131nlar uygulaman\u0131z\u0131n d\u0131\u015f\u0131na \u00e7\u0131kmaz.<\/p>\n<p><strong>Ad\u0131mlar:<\/strong><\/p>\n<p>1.  <strong><code>LocalBroadcastManager<\/code> Kullan\u0131m\u0131:<\/strong><br \/>\n    <code>LocalBroadcastManager<\/code>&#8216;\u0131 kullanmak i\u00e7in, \u00f6ncelikle bir \u00f6rne\u011fini alman\u0131z gerekir.<\/p>\n<pre><code class=\"language-java\">\/\/ MainActivity.java i\u00e7inde\n    \/\/ ...\n    import androidx.localbroadcastmanager.content.LocalBroadcastManager;\n    \/\/ ...\n\n    public class MainActivity extends AppCompatActivity {\n        \/\/ ...\n        private LocalBroadcastManager localBroadcastManager;\n        private MyLocalReceiver myLocalReceiver;\n        private Button sendLocalBroadcastButton;\n        public static final String LOCAL_ACTION = \"com.example.mybroadcastapp.LOCAL_ACTION\";\n\n        @Override\n        protected void onCreate(Bundle savedInstanceState) {\n            super.onCreate(savedInstanceState);\n            setContentView(R.layout.activity_main);\n\n            \/\/ ... (di\u011fer init'ler)\n\n            localBroadcastManager = LocalBroadcastManager.getInstance(this);\n            myLocalReceiver = new MyLocalReceiver();\n\n            sendLocalBroadcastButton = findViewById(R.id.sendLocalBroadcastButton);\n            sendLocalBroadcastButton.setOnClickListener(new View.OnClickListener() {\n                @Override\n                public void onClick(View v) {\n                    sendMyLocalBroadcast();\n                }\n            });\n\n            \/\/ LocalBroadcastManager ile dinamik al\u0131c\u0131y\u0131 kaydet\n            IntentFilter localFilter = new IntentFilter(LOCAL_ACTION);\n            localBroadcastManager.registerReceiver(myLocalReceiver, localFilter);\n            Toast.makeText(this, \"Yerel al\u0131c\u0131 kaydedildi.\", Toast.LENGTH_SHORT).show();\n        }\n\n        @Override\n        protected void onDestroy() {\n            super.onDestroy();\n            \/\/ Yerel al\u0131c\u0131n\u0131n kayd\u0131n\u0131 sil\n            localBroadcastManager.unregisterReceiver(myLocalReceiver);\n            Toast.makeText(this, \"Yerel al\u0131c\u0131 kayd\u0131 silindi.\", Toast.LENGTH_SHORT).show();\n        }\n\n        private void sendMyLocalBroadcast() {\n            Intent intent = new Intent(LOCAL_ACTION);\n            intent.putExtra(\"data\", \"Uygulama i\u00e7i veri!\");\n            localBroadcastManager.sendBroadcast(intent);\n            Toast.makeText(this, \"Yerel yay\u0131n g\u00f6nderildi.\", Toast.LENGTH_SHORT).show();\n        }\n    }<\/code><\/pre>\n<p>    <code>MyLocalReceiver.java<\/code>:<\/p>\n<pre><code class=\"language-java\">\/\/ MyLocalReceiver.java\n    package com.example.mybroadcastapp;\n\n    import android.content.BroadcastReceiver;\n    import android.content.Context;\n    import android.content.Intent;\n    import android.util.Log;\n    import android.widget.Toast;\n\n    public class MyLocalReceiver extends BroadcastReceiver {\n        private static final String TAG = \"MyLocalReceiver\";\n\n        @Override\n        public void onReceive(Context context, Intent intent) {\n            if (intent != null && MainActivity.LOCAL_ACTION.equals(intent.getAction())) {\n                String data = intent.getStringExtra(\"data\");\n                Log.d(TAG, \"Yerel yay\u0131n al\u0131nd\u0131: \" + data);\n                Toast.makeText(context, \"Yerel Yay\u0131n: \" + data, Toast.LENGTH_SHORT).show();\n            }\n        }\n    }<\/code><\/pre>\n<p>    <code>activity_main.xml<\/code>&#8216;e bir buton daha ekleyelim:<\/p>\n<pre><code class=\"language-xml\"><!-- activity_main.xml -->\n    <!-- ... -->\n    <Button\n        android:id=\"@+id\/sendLocalBroadcastButton\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"Yerel Yay\u0131n G\u00f6nder\"\n        android:layout_marginTop=\"16dp\"\/>\n    <!-- ... --><\/code><\/pre>\n<p><strong><code>LocalBroadcastManager<\/code>&#8216;\u0131n Avantajlar\u0131:<\/strong><\/p>\n<p>*   <strong>G\u00fcvenlik:<\/strong> Yay\u0131nlar uygulaman\u0131z\u0131n d\u0131\u015f\u0131na \u00e7\u0131kmad\u0131\u011f\u0131 i\u00e7in di\u011fer uygulamalar taraf\u0131ndan al\u0131namaz. Bu, hassas verilerinizi korur.<br \/>\n*   <strong>Performans:<\/strong> Sistem genelindeki yay\u0131nlara g\u00f6re daha h\u0131zl\u0131d\u0131r, \u00e7\u00fcnk\u00fc IPC (Inter-Process Communication) mekanizmas\u0131 kullan\u0131lmaz.<br \/>\n*   <strong>Kaynak Y\u00f6netimi:<\/strong> Sistem genelindeki yay\u0131nlar i\u00e7in kullan\u0131lan kaynaklar\u0131 t\u00fcketmez.<\/p>\n<p><strong>Not:<\/strong> <code>LocalBroadcastManager<\/code> s\u0131n\u0131f\u0131, AndroidX k\u00fct\u00fcphanesi i\u00e7inde bulunur ve genellikle <code>androidx.localbroadcastmanager.content.LocalBroadcastManager<\/code> olarak import edilir. Google, <code>LocalBroadcastManager<\/code> yerine <code>Flow<\/code> veya <code>LiveData<\/code> gibi daha modern ve ya\u015fam d\u00f6ng\u00fcs\u00fcne duyarl\u0131 yakla\u015f\u0131mlar\u0131 \u00f6nermektedir, ancak basit uygulama i\u00e7i ileti\u015fim senaryolar\u0131 i\u00e7in hala ge\u00e7erli bir se\u00e7enektir.<\/p>\n<h3>\u00d6nemli Noktalar ve En \u0130yi Uygulamalar<\/h3>\n<p>BroadcastReceiver&#8217;lar\u0131 kullan\u0131rken dikkat edilmesi gereken baz\u0131 \u00f6nemli noktalar ve en iyi uygulamalar \u015funlard\u0131r:<\/p>\n<h4>G\u00fcvenlik<\/h4>\n<p>*   <strong>\u0130zinler:<\/strong> \u00d6zel yay\u0131nlar g\u00f6nderirken veya dinlerken <code>android:permission<\/code> niteli\u011fini kullanarak izinler tan\u0131mlay\u0131n. \u00d6rne\u011fin, <code>sendBroadcast(intent, \"com.example.MY_PERMISSION\")<\/code> ile yay\u0131n g\u00f6nderirken, al\u0131c\u0131n\u0131n manifest&#8217;inde bu izni belirtmesi gerekir.<br \/>\n*   <strong><code>android:exported<\/code> Niteli\u011fi:<\/strong> Manifest&#8217;te tan\u0131mlanan al\u0131c\u0131lar i\u00e7in <code>android:exported<\/code> niteli\u011fini dikkatlice kullan\u0131n. E\u011fer al\u0131c\u0131n\u0131z sadece uygulaman\u0131z i\u00e7i yay\u0131nlar\u0131 dinleyecekse veya sadece belirli sistem yay\u0131nlar\u0131na tepki verecekse <code>false<\/code> olarak ayarlay\u0131n. E\u011fer di\u011fer uygulamalar\u0131n yay\u0131n g\u00f6ndermesine veya almas\u0131na izin vermeniz gerekiyorsa <code>true<\/code> yap\u0131n ve m\u00fcmk\u00fcnse izinlerle koruyun.<br \/>\n*   <strong><code>LocalBroadcastManager<\/code>:<\/strong> Uygulama i\u00e7i ileti\u015fim i\u00e7in her zaman <code>LocalBroadcastManager<\/code> kullan\u0131n. Bu, g\u00fcvenlik ve performans a\u00e7\u0131s\u0131ndan en iyi yakla\u015f\u0131md\u0131r.<br \/>\n*   <strong>A\u00e7\u0131k Niyetler (Explicit Intents):<\/strong> M\u00fcmk\u00fcn oldu\u011funca, yay\u0131nlar\u0131 belirli bir bile\u015fene (paket ad\u0131 veya s\u0131n\u0131f ad\u0131 belirterek) hedefleyen a\u00e7\u0131k niyetler kullan\u0131n. Bu, yay\u0131n\u0131n yanl\u0131\u015f al\u0131c\u0131lara ula\u015fmas\u0131n\u0131 engeller.<\/p>\n<h4>Performans<\/h4>\n<p>*   <strong><code>onReceive()<\/code> Metodunda K\u0131sa \u0130\u015flemler:<\/strong> <code>onReceive()<\/code> metodu UI thread&#8217;inde \u00e7al\u0131\u015ft\u0131\u011f\u0131 i\u00e7in, bu metod i\u00e7inde uzun s\u00fcreli veya yo\u011fun i\u015flemler yapmaktan ka\u00e7\u0131n\u0131n. E\u011fer bir i\u015flem 10 saniyeden uzun s\u00fcrerse, Android ANR hatas\u0131 verebilir.<br \/>\n*   <strong>Arka Plan \u0130\u015flemleri \u0130\u00e7in Servisler:<\/strong> Uzun s\u00fcreli i\u015flemler i\u00e7in <code>JobIntentService<\/code>, <code>WorkManager<\/code> veya <code>Service<\/code> gibi bile\u015fenleri kullan\u0131n. <code>onReceive()<\/code> metodundan bir <code>Service<\/code> ba\u015flatabilir ve i\u015flemi ona devredebilirsiniz.<br \/>\n*   <strong>Dinamik Kay\u0131t ve Kay\u0131t Silme:<\/strong> Dinamik olarak kaydedilen al\u0131c\u0131lar\u0131n\u0131z\u0131 her zaman uygun ya\u015fam d\u00f6ng\u00fcs\u00fc metotlar\u0131nda kaydedin (<code>onResume()<\/code>) ve kayd\u0131n\u0131 silin (<code>onPause()<\/code>). Bu, bellek s\u0131z\u0131nt\u0131lar\u0131n\u0131 \u00f6nler ve gereksiz yere kaynak t\u00fcketimini engeller.<br \/>\n*   <strong>Gereksiz Yay\u0131nlardan Ka\u00e7\u0131nma:<\/strong> Uygulaman\u0131z\u0131n \u00e7ok s\u0131k yay\u0131n g\u00f6ndermemesine dikkat edin, \u00f6zellikle de sistem genelindeki yay\u0131nlar i\u00e7in. Bu, cihaz\u0131n batarya \u00f6mr\u00fcn\u00fc ve performans\u0131n\u0131 olumsuz etkileyebilir.<\/p>\n<h4>API Seviyesi De\u011fi\u015fiklikleri<\/h4>\n<p>*   <strong>Android 8.0 (Oreo) ve Sonras\u0131 K\u0131s\u0131tlamalar\u0131:<\/strong> Android 8.0 (API 26) ve \u00fczeri s\u00fcr\u00fcmlerde, arka plan uygulamalar\u0131 taraf\u0131ndan \u00e7o\u011fu \u00f6rt\u00fck yay\u0131n dinlemesi k\u0131s\u0131tlanm\u0131\u015ft\u0131r. Bu, uygulaman\u0131z arka plandayken manifest&#8217;te beyan etti\u011finiz bir\u00e7ok sistem yay\u0131n\u0131n\u0131n art\u0131k tetiklenmeyebilece\u011fi anlam\u0131na gelir. Baz\u0131 istisnalar (\u00f6rne\u011fin, <code>BOOT_COMPLETED<\/code>, <code>ACTION_POWER_CONNECTED<\/code>) hala \u00e7al\u0131\u015f\u0131r. Bu k\u0131s\u0131tlamalar, batarya \u00f6mr\u00fcn\u00fc iyile\u015ftirmek ve arka plan kaynak kullan\u0131m\u0131n\u0131 azaltmak i\u00e7in getirilmi\u015ftir.<br \/>\n*   <strong>Alternatif Yakla\u015f\u0131mlar:<\/strong> Android&#8217;in yeni s\u00fcr\u00fcmlerinde, BroadcastReceiver&#8217;lar\u0131n yerini alabilecek veya onlara alternatif olabilecek daha modern yakla\u015f\u0131mlar (\u00f6rne\u011fin, <code>WorkManager<\/code> for background tasks, <code>JobScheduler<\/code> for scheduled tasks, <code>LiveData<\/code> or <code>Flow<\/code> for in-app communication) bulunmaktad\u0131r. Uygulaman\u0131z\u0131n mimarisini tasarlarken bu alternatifleri de g\u00f6z \u00f6n\u00fcnde bulundurun.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>BroadcastReceiver, Android uygulamalar\u0131n\u0131n sistem ve di\u011fer uygulamalarla etkile\u015fim kurmas\u0131n\u0131 sa\u011flayan temel ve g\u00fc\u00e7l\u00fc bir bile\u015fendir. Sistem olaylar\u0131na tepki verme, uygulama i\u00e7i bile\u015fenler aras\u0131 ileti\u015fim ve hatta uygulamalar aras\u0131 ileti\u015fim i\u00e7in esnek bir mekanizma sunar.<\/p>\n<p>Bu makalede, BroadcastReceiver&#8217;\u0131n temel kavramlar\u0131n\u0131, statik ve dinamik kay\u0131t y\u00f6ntemlerini, \u00f6zel yay\u0131n g\u00f6nderme tekniklerini ve <code>LocalBroadcastManager<\/code> kullan\u0131m\u0131n\u0131 \u00f6rnek kodlarla detayl\u0131 bir \u015fekilde inceledik. Ayr\u0131ca, g\u00fcvenlik, performans ve API seviyesi de\u011fi\u015fiklikleri gibi \u00f6nemli hususlara ve en iyi uygulamalara de\u011findik.<\/p>\n<p>Do\u011fru kullan\u0131ld\u0131\u011f\u0131nda, BroadcastReceiver&#8217;lar uygulaman\u0131z\u0131 daha duyarl\u0131, etkile\u015fimli ve kullan\u0131c\u0131 dostu hale getirebilir. Ancak, \u00f6zellikle Android&#8217;in yeni s\u00fcr\u00fcmlerindeki k\u0131s\u0131tlamalar ve performans etkileri g\u00f6z \u00f6n\u00fcnde bulundurularak dikkatli bir \u015fekilde tasarlanmal\u0131 ve uygulanmal\u0131d\u0131r. Modern Android geli\u015ftirme pratikleriyle birle\u015ftirildi\u011finde, BroadcastReceiver&#8217;lar hala Android geli\u015ftiricilerinin ara\u00e7 kutusunda de\u011ferli bir yer tutmaktad\u0131r.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Android BroadcastReceiver \u00d6rnek Uygulama ve Detayl\u0131 Anlat\u0131m\nAndroid i\u015fletim sistemi, uygulamalar aras\u0131 ileti\u015fimi ve sistem olaylar\u0131na tepki ve","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-32143","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Android BroadcastReceiver \u00d6rnek Uygulama ve Detayl\u0131 Anlat\u0131m - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/android-broadcastreceiver-ornek-uygulama-ve-detayli-anlatim\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Android BroadcastReceiver \u00d6rnek Uygulama ve Detayl\u0131 Anlat\u0131m\" \/>\n<meta property=\"og:description\" content=\"Android BroadcastReceiver \u00d6rnek Uygulama ve Detayl\u0131 Anlat\u0131m Android i\u015fletim sistemi, uygulamalar aras\u0131 ileti\u015fimi ve sistem olaylar\u0131na tepki ve\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/android-broadcastreceiver-ornek-uygulama-ve-detayli-anlatim\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-18T04:40:57+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/android-broadcastreceiver-ornek-uygulama-ve-detayli-anlatim\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/android-broadcastreceiver-ornek-uygulama-ve-detayli-anlatim\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Android BroadcastReceiver \u00d6rnek Uygulama ve Detayl\u0131 Anlat\u0131m\",\"datePublished\":\"2025-10-18T04:40:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/android-broadcastreceiver-ornek-uygulama-ve-detayli-anlatim\/\"},\"wordCount\":2404,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/android-broadcastreceiver-ornek-uygulama-ve-detayli-anlatim\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/android-broadcastreceiver-ornek-uygulama-ve-detayli-anlatim\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/android-broadcastreceiver-ornek-uygulama-ve-detayli-anlatim\/\",\"name\":\"Android BroadcastReceiver \u00d6rnek Uygulama ve Detayl\u0131 Anlat\u0131m - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-18T04:40:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/android-broadcastreceiver-ornek-uygulama-ve-detayli-anlatim\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/android-broadcastreceiver-ornek-uygulama-ve-detayli-anlatim\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/android-broadcastreceiver-ornek-uygulama-ve-detayli-anlatim\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Android BroadcastReceiver \u00d6rnek Uygulama ve Detayl\u0131 Anlat\u0131m\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Android BroadcastReceiver \u00d6rnek Uygulama ve Detayl\u0131 Anlat\u0131m - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/android-broadcastreceiver-ornek-uygulama-ve-detayli-anlatim\/","og_locale":"tr_TR","og_type":"article","og_title":"Android BroadcastReceiver \u00d6rnek Uygulama ve Detayl\u0131 Anlat\u0131m","og_description":"Android BroadcastReceiver \u00d6rnek Uygulama ve Detayl\u0131 Anlat\u0131m Android i\u015fletim sistemi, uygulamalar aras\u0131 ileti\u015fimi ve sistem olaylar\u0131na tepki ve","og_url":"https:\/\/fatihsoysal.com\/blog\/android-broadcastreceiver-ornek-uygulama-ve-detayli-anlatim\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-18T04:40:57+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"17 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/android-broadcastreceiver-ornek-uygulama-ve-detayli-anlatim\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/android-broadcastreceiver-ornek-uygulama-ve-detayli-anlatim\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Android BroadcastReceiver \u00d6rnek Uygulama ve Detayl\u0131 Anlat\u0131m","datePublished":"2025-10-18T04:40:57+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/android-broadcastreceiver-ornek-uygulama-ve-detayli-anlatim\/"},"wordCount":2404,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/android-broadcastreceiver-ornek-uygulama-ve-detayli-anlatim\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/android-broadcastreceiver-ornek-uygulama-ve-detayli-anlatim\/","url":"https:\/\/fatihsoysal.com\/blog\/android-broadcastreceiver-ornek-uygulama-ve-detayli-anlatim\/","name":"Android BroadcastReceiver \u00d6rnek Uygulama ve Detayl\u0131 Anlat\u0131m - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-18T04:40:57+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/android-broadcastreceiver-ornek-uygulama-ve-detayli-anlatim\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/android-broadcastreceiver-ornek-uygulama-ve-detayli-anlatim\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/android-broadcastreceiver-ornek-uygulama-ve-detayli-anlatim\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Android BroadcastReceiver \u00d6rnek Uygulama ve Detayl\u0131 Anlat\u0131m"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32143","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=32143"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32143\/revisions"}],"predecessor-version":[{"id":32144,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32143\/revisions\/32144"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32143"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32143"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32143"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}