Bu derste dinamik olarak yani çalışma anında yani java kodu ile broadcast receiver tanımlamayı inceledik.
Şuana kadar yaptığımız örneklerde tanımladığımız broadcast receiver’lar statikti. Yani manifest dosyasında belirtiliyordu. Bu derste manifest dosyasına tanımlamadan sadece java kodu ile bir receiver nasıl tanımlanır onu öğrendik.
Peki neden dinamik broadcast receiver kullanmamız gerekir?
1- Geçici ihtiyaçlardan : Uygulamamızın belli bölümlerinde receiver ihtiyacı olabilir ve o receiverın sadece uygulama çalışırken çalışmasını, uygulama kapandığında durmasını/çalışmamasını isteyebiliriz. Bu yüzden dinamik olarak tanımlamamız gerekir.
2- Zorunlu bazı eventler : Bazı tanımlı eventler vardır ki sadece ve sadece dinamik olarak oluşturulan broadcast receiverlar ile çalışır. Bunları kullanmak istediğimizde statik olarak tanımlayamayız. Mesela sistem saati değiştiğinde tetiklenen ve her bir dakikada sistem tarafından receiverlara gönderilen ACTION_TIME_TICK için…
3-Sticky Broadcast (ki bir sonraki videoda anlatılacak) kullanmak istiyorsak dinamik receiver kullanmamız gerekiyor
Dinamik olarak receiver tanımı yaparken genellikle onResume methodu içinde registerReceiver() methodunu kullanırız. Bu method birinci parametre olarak ilgili broadcastreceiver nesnesini, ikinci parametre olarak da bir intent filter nesnesini bekler.
Bir receiverı dinamik olarak tanımladıktan sonra genellikle onPause methodunda unRegisterReceiver() methodu ile sonlandırmalıyız. Aksi taktirde Leaked Intent Receiver hatası alırız. Bu yüzden register ettiğimiz bir receiverı unregister etmeyi unutmamamız gerekiyor.
Dinamik receiverlar activity çalıştığı sürece tanımlıdır. İlgili activity’den veya uygulamadan çıkıldığında çalışmayı durdurur.
Bu ders sonunda 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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
public class MainActivity extends AppCompatActivity { private static final String TAG=MainActivity.class.getSimpleName(); private int dakika=1; TextView text; private MyFirstReceiver myFirstReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myFirstReceiver=new MyFirstReceiver(); text= (TextView) findViewById(R.id.textView); } @Override protected void onResume() { super.onResume(); IntentFilter intentFilter=new IntentFilter(); //intentFilter.addAction("android.intent.action.AIRPLANE_MODE"); intentFilter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED); registerReceiver(myFirstReceiver, intentFilter); } @Override protected void onPause() { super.onPause(); unregisterReceiver(myFirstReceiver); } public void registerReceiver(View view) { IntentFilter filter=new IntentFilter(); filter.addAction(Intent.ACTION_TIME_TICK); registerReceiver(myTimeTickReceiver, filter); } public void unRegisterReceiver(View view) { unregisterReceiver(myTimeTickReceiver); } private BroadcastReceiver myTimeTickReceiver=new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Log.i(TAG, "myTimeTickReceiver receiver!!"); Toast.makeText(context, "myTimeTickReceiver Receiver!!!", Toast.LENGTH_LONG).show(); int dakikaDegeri=dakika; text.setText(dakikaDegeri+ " dakika geçti"); dakika++; } }; } |
1 2 3 4 5 6 7 8 9 10 |
public class MyFirstReceiver extends BroadcastReceiver { private static final String TAG=MainActivity.class.getSimpleName(); @Override public void onReceive(Context context, Intent intent) { Log.i(TAG, "Birinci receiver!!"); Toast.makeText(context, "Birinci Receiver!!!", Toast.LENGTH_LONG).show(); } } |
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 |
<?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.broadcastreceiverdinamik.MainActivity"> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:layout_marginTop="23dp" android:onClick="registerReceiver" android:text="Register Receiver" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignEnd="@+id/button" android:layout_below="@+id/button" android:layout_marginTop="23dp" android:onClick="unRegisterReceiver" android:text="UnRegister Receiver" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_toEndOf="@+id/button2" android:text="TextView" /> </RelativeLayout> |