Here is source code of the Program demonstrate an Ordered Intent in Android. The program is successfully compiled and run on a Windows system using Eclipse Ide. The program output is also shown below.
When the order in which the Broadcast Receivers receive the Intent is important — particularly where you want to allow Receivers to affect the Broadcast Intent received by future Receivers — you can use sendOrderedBroadcast, as follows:
String requiredPermission = “com.example.package_name.MY_BROADCAST_PERMISSION”; sendOrderedBroadcast(intent, requiredPermission);
Using this method, your Intent will be delivered to all registered Receivers that hold the required permission (if one is specified) in the order of their specified priority. You can specify the priority of a Broadcast Receiver using the android:priority attribute within its Intent Filter manifest node, where higher values are considered higher priority.
Main Activity
package com.example.ordered_broadcast; import android.os.Bundle; import android.annotation.SuppressLint; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.ReceiverCallNotAllowedException; import android.view.Menu; import android.view.View; import android.widget.Button; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button b1 = (Button) findViewById(R.id.button1); b1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub broadcastintent(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public void broadcastintent() { Intent intent = new Intent(); intent.setAction("com.example.ordered_broadcast.OrderedBroadcast"); sendOrderedBroadcast(intent, null, new BroadcastReceiver() { @SuppressLint("NewApi") @Override public void onReceive(Context context, Intent intent) { /* * to capture result after all broadreceivers are finished * executing */ } }, null, Activity.RESULT_OK, null, null); } }
MyReceiver1
package com.example.ordered_broadcast; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class MyReceiver1 extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub Toast.makeText(context, "MyReceiver1 provoked", Toast.LENGTH_LONG).show(); } }
MyReceiver2
package com.example.ordered_broadcast; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class MyReceiver2 extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub Toast.makeText(context, "MyReceiver2 provoked", Toast.LENGTH_LONG).show(); } }
Activity_Main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_marginBottom="186dp" android:text="Launch" /> </RelativeLayout>
Register your receiver here and set the priority of them accordingly.
Android Manifest
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.ordered_broadcast" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.ordered_broadcast.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".MyReceiver1" > <intent-filter android:priority="1" > <action android:name="com.example.ordered_broadcast.OrderedBroadcast" /> </intent-filter> </receiver> <receiver android:name=".MyReceiver2" > <intent-filter android:priority="2" > <action android:name="com.example.ordered_broadcast.OrderedBroadcast" /> </intent-filter> </receiver> </application> </manifest>