042 Java Android Program to Demonstrate Ordered BroadCast
Posted by Superadmin on February 26 2017 08:21:05

Java Android Program to Demonstrate Ordered BroadCast

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>