How to Broadcast a Message After a Phone Change Its State in Android Using Android Studio

Introduction

This article explains how to broadcast a message after the phone changes its state in Android. Android Studio is used to develop the sample.

This application will Broadcast a message when a call comes in the Android device.


To make this type of application you need to first register your Broadcast Receiver in your Manifest.xml file. Extends broadcastreceiver class in your class that provides the onReceive() method where you will get the object of the TelephoneManager class.
Inside the main class you will create another inner class that extends the PhoneStateListener class that provides onCallStateChanged that consists of a state and an incoming number as an argument. Both number and state will show with the help of a Toast to show the state change.

Step 1

Create the project as in the following:

click on the file
click on new project
click on Android application project
Write the name of you application in the box depending on your project

Clipboard07.jpg

Step 2

Register a Broadcast Receiver in your Android Manifest.xml file like the following;

for this you will use the "receiver" tag:

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

    package="com.broadcastphoneste"

    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.broadcastphoneste.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="MyReciever">

      <intent-filter>

      <action android:name="android.intent.action.PHONE_STATE"/>

      </intent-filter>

 

  </receiver>

    </application>

 

    <uses-permission

        android:name="android.permission.READ_PHONE_STATE"></uses-permission>

</manifest>


Step 3

 
Create an XML file and write the following.

This XML file contains a TextView that displays a message when the application runs.

<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:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin"

    android:paddingBottom="@dimen/activity_vertical_margin"

    tools:context=".MainActivity">

 

    <TextView

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="WhenEver Call comes it will show a Message" />

 

</RelativeLayout>

Step 4

Create a MainActivty.java class and write this:

 

import android.os.Bundle;

import android.app.Activity;

import android.view.Menu;

 

public class MainActivity extends Activity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

    }

    @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;

    }

}

Step 5

Create another Java class that extends the BroadcastReceiver class as in the following:
 

package com.broadcastphoneste;

 

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.telephony.PhoneStateListener;

import android.telephony.TelephonyManager;

import android.util.Log;

import android.widget.Toast;

 

/**

 * Created by vivek on 10/3/13.

 */

public class MyReciever extends BroadcastReceiver {

 

    Context context;

    @Override

 

    public void onReceive(Context c, Intent intent) {

        context=c;

        try {

            // TELEPHONY MANAGER class object to register one listner

            TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

            //Create Listner

            MyPhoneStateListener PhoneListener = new MyPhoneStateListener();

            // Register listener for LISTEN_CALL_STATE

            telephonyManager.listen(PhoneListener, PhoneStateListener.LISTEN_CALL_STATE);

        } catch (Exception e) {

            Log.e("Phone Receive Error", " " + e);

        }

    }

    private class MyPhoneStateListener extends PhoneStateListener {

 

        public void onCallStateChanged(int state, String incomingNumber) {

            Log.d("MyPhoneListener",state+"   incoming no:"+incomingNumber);

            if (state == 1) {

                String msg = "New Phone Call Event. Incomming Number : "+incomingNumber;

                Toast.makeText(context,msg,Toast.LENGTH_LONG).show();

            }

        }

    }

}



Run this application on the emulator

First run the application; after displaying the activity page you will open the android DDMS where you click on the Emulator Control that wiil disply the page like this:

Clipboard100.jpg

In the middle of this page you will see the incoming number where you will enter the number and click on the send button. Then you will see on your activity a broadcast message will appear.


Step 6


Run your application.

Image 1

Clipboard008.jpg

Step 7

Image 2

Clipboard08.jpg

Step 8

Image 3

Clipboard09.jpg

Step 9


Image 4

Clipboard10.jpg

Up Next
    Ebook Download
    View all
    Learn
    View all