Bu derste bir diğer broadcastreceiver çeşidi olan ordered yani sıralı broadcastreceiverları inceliyoruz.
Hatırlarsanız aynı action name’e sahip bir receiver tetiklendiğinde manifest dosyasındaki oluşturulma sırasına göre bunlar çalıştırılıyordu. Ordered broadcast receiver kullanarak bu durumu değiştirebiliriz.
Manifest dosyasında tanımlı olan receiverların intent-filter kısmına tanımlayacağımızı android:priority etiketiyle istediğimiz sırada çalışmalarını sağlayabiliriz. Bu etikete yazacağımız integer değerlerden hangisi en büyük ise o önce çalıştırılacaktır.
Ayrıca bu derste broadcast receiverlar arasında veri gönderme işleminin nasıl yapılacağını da görmüş olduk. Oluşturduğumuz intenti bu sefer sendOrderedBroadcast methoduna gönderdik. Bu method birden fazla parametre almaktadır. Bunlar sırasıyla:
Intent intent = Oluşturduğumuz intent
String receiverPermission = Bir broadcastın çalışması tanımlanan bir izine bağımlı olabilir.
BroadcastReceiver resultReceiver = Broadcastın son halkası, yani çalıştılacak son receiver
Handler scheduler = resultReceiverın callback işlemini zamanlamak istersek kullanılacak parametre
int initialCode = Sonucu tanımlayan int değer, genellikle Activity.RESULT_OK yani -1’dir
String initialData = Sonucu açıklayan string bir değer
Bundle initialExtra = Sonuçla ilgili bundle nesnesi
Yaptığımız örnekte main activityde tanımladığımız değerleri sırasıyla InnerReceiver -> SecondReceiver -> FirstReceiver ->ForthReceiver’a gönderdik ve her birinde bu değerleri değiştirdik.
Eğer mesela SecondReceiver’da abortReceiver methodu kullanılırsa, bundan sonra çağrılacak olan FirstReceiver ve ForthReceiver çalıştırılmaz.
Değerleri getResultCode, getResultData, getResultExtras ile okurken; setResultCOde, setResultData, setResultExtras ile yazıyoruz. Ayrıca böyle ayırmak yerine direk olarak
setResult(code, data,extras) methodunu da kullanabiliriz.
Bu dersin sonunda örneğimizin 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 |
public class MainActivity extends AppCompatActivity { private static final String TAG=MainActivity.class.getSimpleName(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void sendBroadcastMessage(View v){ Intent intent=new Intent("my.custom.action.name"); // sendOrderedBroadcast(intent, null); Bundle bundle=new Bundle(); bundle.putString("baslik", "EMRE"); sendOrderedBroadcast(intent,null,new ForthReceiver(),null, AppCompatActivity.RESULT_OK, "Android", bundle); } public static class MyInnerReceiver extends BroadcastReceiver{ private static final String TAG=MyInnerReceiver.class.getSimpleName(); @Override public void onReceive(Context context, Intent intent) { if(isOrderedBroadcast()) { int code = getResultCode(); String data = getResultData(); Bundle b = getResultExtras(true); String baslik = b.getString("baslik"); Log.i(TAG, "Code:" + code + " Data :" + data + " Bundle: " + baslik); Log.i(TAG, "Inner receiver'dan selamlar"); Toast.makeText(context, "Inner receiver'dan selamlar", Toast.LENGTH_LONG).show(); setResultCode(6); setResultData("IOS"); b.putString("baslik", "ALTUNBILEK"); setResultExtras(b); } } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?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.broadcastreceiverornek1.MainActivity"> <Button android:id="@+id/btnBroadcastNow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:onClick="sendBroadcastMessage" android:text="Broadcast Now!" /> </RelativeLayout> |
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 |
public class MyFirstReceiver extends BroadcastReceiver { private static final String TAG=MyFirstReceiver.class.getSimpleName(); @Override public void onReceive(Context context, Intent intent) { if(isOrderedBroadcast()) { int code = getResultCode(); String data = getResultData(); Bundle b = getResultExtras(true); String baslik = b.getString("baslik"); Log.i(TAG, "Code:" + code + " Data :" + data + " Bundle: " + baslik); Log.i(TAG, "Birinci receiver'dan selamlar Thread adı :" + Thread.currentThread().getName()); Toast.makeText(context, "Birinci receiver'dan selamlar", Toast.LENGTH_LONG).show(); setResultCode(26); setResultData("SON"); b.putString("baslik", " SELAMLAR"); setResultExtras(b); } } } |
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 |
public class MySecondReceiver extends BroadcastReceiver { private static final String TAG=MySecondReceiver.class.getSimpleName(); @Override public void onReceive(Context context, Intent intent) { if(isOrderedBroadcast()) { int code = getResultCode(); String data = getResultData(); Bundle b = getResultExtras(true); String baslik = b.getString("baslik"); Log.i(TAG, "Code:" + code + " Data :" + data + " Bundle: " + baslik); Log.i(TAG, "İkinci receiver'dan selamlar"); Toast.makeText(context, "İkinci receiver'dan selamlar", Toast.LENGTH_LONG).show(); setResultCode(16); setResultData("BLACKBERRY"); b.putString("baslik", "ALTUNBILEK"); setResultExtras(b); // abortBroadcast(); } } } |
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 |
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.emrealtunbilek.broadcastreceiverornek1"> <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=".MyFirstReceiver"> <intent-filter android:priority="10"> <action android:name="my.custom.action.name"></action> </intent-filter> </receiver> <receiver android:name=".MySecondReceiver"> <intent-filter android:priority="20"> <action android:name="my.custom.action.name"></action> </intent-filter> </receiver> <receiver android:name=".MainActivity$MyInnerReceiver"> <intent-filter android:priority="30"> <action android:name="my.custom.action.name"></action> </intent-filter> </receiver> <receiver android:name=".ForthReceiver"> <intent-filter> <action android:name="my.custom.action.name"></action> </intent-filter> </receiver> </application> </manifest> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public class ForthReceiver extends BroadcastReceiver { private static final String TAG=MyFirstReceiver.class.getSimpleName(); @Override public void onReceive(Context context, Intent intent) { if(isOrderedBroadcast()) { int code = getResultCode(); String data = getResultData(); Bundle b = getResultExtras(true); String baslik = b.getString("baslik"); Log.i(TAG, "Code:" + code + " Data :" + data + " Bundle: " + baslik); Log.i(TAG, "Dördüncü receiver'dan selamlar"); Toast.makeText(context, "Dördüncü receiver'dan selamlar", Toast.LENGTH_LONG).show(); } } } |