Blog : Listening incoming sms message in Android
Listening incoming sms message in Android
When a new sms message is received by the device, a Broadcast Receiver is registered. For this
IntentFilter filter = new IntentFilter(SMS_RECEIVED);
registerReceiver(receiver_SMS, filter);
should be included . Also sms are sent in PDU’s(Protocol Description Units) format, which act as an encapsulation.
Inorder to extract from PDU to byte array
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
method is used.
When sms comes, the BroadCast listener is activated and sms sender number is showed in a ListView
package com.coderzheaven.pack;
import java.util.ArrayList;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class smsReceiver extends Activity
{
/** Called when the activity is first created. */
public static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
ListView list;
ArrayList
messageList;
ArrayAdapter< String> adapter;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
list = (ListView) findViewById(R.id.listView1);
messageList = new ArrayList();
//messageList.add("check");
adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, messageList);
list.setAdapter(adapter);
IntentFilter filter = new IntentFilter(SMS_RECEIVED);
registerReceiver(receiver_SMS, filter);
}
BroadcastReceiver receiver_SMS = new BroadcastReceiver()
{
public void onReceive(Context context, Intent intent)
{
if (intent.getAction().equals(SMS_RECEIVED))
{
Bundle bundle = intent.getExtras();
if (bundle != null)
{
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++)
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
for (SmsMessage message : messages)
{
Toast.makeText(smsReceiver.this, "----"+message.getDisplayMessageBody(), Toast.LENGTH_LONG).show();
receivedMessage(message.getDisplayOriginatingAddress());
}
}
}
}
};
private void receivedMessage(String message)
{
messageList.add(message);
adapter.notifyDataSetChanged();
}
}
The xml hold a ListView
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
android:id="@+id/listView1"
android:layout_width="fill_parent"/>
Also important part is that, for an application to listen an SMS Intent Broadcast should be added