Sunday, December 3, 2017

Broadcast Receiver In Android

Broadcast Receivers simply respond to broadcast messages from other applications or from the system itself. 
These messages are sometime called events or intents. For example, applications can also initiate broadcasts 
to let other applications know that some data has been downloaded to the device and is available for
them to use, so this is broadcast receiver who will intercept this communication and will initiate appropriate action.

Two important steps to make BroadcastReceiver works for the system broadcasted intents.


  • Creating the Broadcast Receiver.
  • Registering Broadcast Receiver



one additional steps in case you are going to implement your custom intents then you will have to create and broadcast those intents.

Creating the Broadcast Receiver:

A broadcast receiver is implemented as a subclass of BroadcastReceiver class and overriding the onReceive() method where each message is received as a Intent object parameter.

public class MyReceiver extends BroadcastReceiver {
   @Override
   public void onReceive(Context context, Intent intent) {
      Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show();
   }
}

Registering Broadcast Receiver:

An application listens for specific broadcast intents by registering a broadcast receiver in AndroidManifest.xml file. 
Consider we are going to register MyReceiver for system generated event ACTION_BOOT_COMPLETED which 
is fired by the system once the Android system has completed the boot process.


Example:

<application
   android:icon="@drawable/ic_launcher"
   android:label="@string/app_name"
   android:theme="@style/AppTheme" >
   <receiver android:name="MyReceiver">
   
      <intent-filter>
         <action android:name="android.intent.action.BOOT_COMPLETED">
         </action>
      </intent-filter>
   
   </receiver>
</application>



android.intent.action.BATTERY_CHANGED
Sticky broadcast containing the charging state, level, and other information about the battery.

android.intent.action.BATTERY_LOW
Indicates low battery condition on the device.

android.intent.action.BATTERY_OKAY
Indicates the battery is now okay after being low.

android.intent.action.BOOT_COMPLETED
This is broadcast once, after the system has finished booting.

android.intent.action.BUG_REPORT
Show activity for reporting a bug.

android.intent.action.CALL
Perform a call to someone specified by the data.

android.intent.action.CALL_BUTTON
The user pressed the "call" button to go to the dialer or other appropriate UI for placing a call.

android.intent.action.DATE_CHANGED
The date has changed.

android.intent.action.REBOOT
Have the device reboot.


Example:

package com.android.androidvedha.myapplication;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {

   /** Called when the activity is first created. */
   @Override
   
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
   }


   // broadcast a custom intent.
      
   public void broadcastIntent(View view){
      Intent intent = new Intent();
      intent.setAction("com.android.CUSTOM_INTENT"); 
      sendBroadcast(intent);
   }
}


Following is the content of MyReceiver.java:

package com.android.androidvedha.myapplication;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;


public class MyReceiver extends BroadcastReceiver{
   @Override
   public void onReceive(Context context, Intent intent) {
      Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show();
   }
}



Following will the modified content of AndroidManifest.xml file. Here we have added <receiver.../> tag to include our service:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.android.androidvedha.myapplication">

   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      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">
         <intent-filter>
            <action android:name="com.android.CUSTOM_INTENT">
            </action>
         </intent-filter>

      </receiver>
   </application>

</manifest>

No comments:

Post a Comment