In this tutorial we'll create an Android application to receive SMS using BroadcastReceiver. On receiving the SMS we'll show a toast message and update TextView with incoming sms number and message body.
Add permission to receive SMS
Add BroadcastReceiver with an intent-filter to receiving SMS.
activity_sms.xml
SMSActivity.java
SmsReceiver.java
Adding Permission and BroadcastReceiver to AndroidManifest
We need to do couple of things:Add permission to receive SMS
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
Add BroadcastReceiver with an intent-filter to receiving SMS.
<receiver android:name="com.sushil.tech.readingsms.SmsReceiver"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver>
Source Code:
AndroidManifest.xml<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.sushil.tech.readingsms" > <uses-permission android:name="android.permission.RECEIVE_SMS"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme" > <activity android:name=".SMSActivity" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="com.sushil.tech.readingsms.SmsReceiver"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver> </application> </manifest>
activity_sms.xml
<?xml version="1.0" encoding="utf-8"?> <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:padding="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:id="@+id/tvHeader" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:text="Received SMS" android:textStyle="bold"/> <TextView android:id="@+id/tvSmsBody" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/tvHeader" android:layout_marginTop="16dp" android:scrollbars="vertical"/> </RelativeLayout>
SMSActivity.java
package com.sushil.tech.readingsms; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.text.method.ScrollingMovementMethod; import android.widget.TextView; public class SMSActivity extends AppCompatActivity { TextView tvSmsBody; String fullSmsInfo = ""; public static SMSActivity inst; public static SMSActivity instance() { return inst; } @Override public void onStart() { super.onStart(); inst = this; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sms); tvSmsBody = (TextView) findViewById(R.id.tvSmsBody); tvSmsBody.setMovementMethod(new ScrollingMovementMethod()); } public void displaySms(String smsBody) { fullSmsInfo += smsBody + "\n\n"; tvSmsBody.setText(fullSmsInfo); } }
SmsReceiver.java
package com.sushil.tech.readingsms; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telephony.SmsMessage; import android.util.Log; import android.widget.Toast; public class SmsReceiver extends BroadcastReceiver { Context mContext; @Override public void onReceive(Context context, Intent intent) { final Bundle bundle = intent.getExtras(); try{ if(bundle != null) { Object[] object = (Object[]) bundle.get("pdus"); for(int i = 0; i < object.length; i++) { SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) object[i]); String phoneNumber = smsMessage.getDisplayOriginatingAddress(); String message = smsMessage.getDisplayMessageBody(); Log.i("SMS ", "from: " + phoneNumber + " " + message); Toast.makeText(context, phoneNumber+": "+message, Toast.LENGTH_SHORT).show(); // Calling SMSActivity method to display using TextView String fullSmsInfo = "From: "+phoneNumber+"\n"+message; SMSActivity instance = SMSActivity.instance(); instance.displaySms(fullSmsInfo); } } } catch (Exception e){ Toast.makeText(context, "Exception"+e.getMessage(), Toast.LENGTH_LONG).show(); e.printStackTrace(); } } }
Test your SMS Application using Android Emulator
- Rum Android Device Monitor by simply clicking on it from toolbar or go to Tools -> Android -> Android Device Monitor.
- In Android Device Monitor now select DDMS and choose Emulator Control Tab.
- Now you can enter Incoming number, select SMS option, enter message and click on send to receive SMS.
Test SMS Application in Android |
Note: Genymotion Emulator doesn't provide provide SMS Receiving feature in free version, so either you can go for full version or use Android Emulator as described above.
Screen Preview
Receiving SMS in Android |
0 comments:
Post a Comment