Bu dersimizde local broadcast çeşidini anlatmaya çalıştık.
Şu ana kadar normal, ordered ve sticky broadcast receiver örneklerini görmüştük, bu derste broadcast receiverların son çeşidi olan local yani sadece o uygulama içinde kullanılan çeşidini anlatmaya çalıştık.
Android support library ile birlikte kullanılmaya başlanan bu receiver sayesinde aynı uygulama içindeki farklı componentler arasında iletişim sağlayabiliyoruz. Bunlar iki activity arasında, activity ve service arasında, activity ve broadcastReceiver arasında veya service ile broadcastReceiver arasında olabilir.
LocalBroadcastManager kullanılmasının en önemli sebebi daha fazla güvenlik sağlamasıdır. Çünkü local olarak çalışır yani broadcast intenti uygulama dışına çıkmaz ve de uygulama dışından herhangi bir broadcast mesaj receiverlara ulaşmaz.
Bir broadcastı local olarak kullanabilmek için LocalBroadcastManager sınıfını kullanırız.
Öncelikle LocalBroadcastManager manager=LocalBroadcastManager.getInstance(context); diyerek bu nesneyi tanımlıyoruz. Daha sonra bu nesneyi kullanarak sendBroadcast methodu sayesinde alıcılarımıza mesaj gönderebiliriz.
Yine bu nesne sayesinde receiverı dinamik olarak register ve unregister edebiliriz. Bu sayede dışarıya mesaj göndermemiş ve de alıcılarımızın dışarıdan bir mesaj almamasını sağlamış oluruz.
Bu derste yazılan kodlar aşağıdaki gibidir:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
public class MainActivity extends AppCompatActivity { private LocalBroadcastManager manager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); manager = LocalBroadcastManager.getInstance(this); } public void sendNormalBroadcast(View view) { Intent intent = new Intent(this, MyReceiver.class); intent.putExtra("a", 15); intent.putExtra("b", 20); sendBroadcast(intent); } @Override protected void onResume() { super.onResume(); IntentFilter filter = new IntentFilter(); filter.addAction("my.result.receiver"); manager.registerReceiver(receiver, filter); } @Override protected void onPause() { super.onPause(); manager.unregisterReceiver(receiver); } private BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { int toplam = intent.getIntExtra("toplam", 0); Toast.makeText(context, "Toplam : " + toplam, Toast.LENGTH_LONG).show(); } }; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.emrealtunbilek.localbroadcastornek.MainActivity"> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:onClick="sendNormalBroadcast" android:text="Send Normal Broadcast" /> </RelativeLayout> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { int ilkSayi=intent.getIntExtra("a", 0); int ikinciSayi=intent.getIntExtra("b", 0); int toplamDeger= ilkSayi + ikinciSayi; LocalBroadcastManager manager=LocalBroadcastManager.getInstance(context); Intent returningIntent=new Intent("my.result.receiver"); returningIntent.putExtra("toplam", toplamDeger); manager.sendBroadcast(returningIntent); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.emrealtunbilek.localbroadcastornek"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".MyReceiver"></receiver> </application> </manifest> |