The following code shows how to create a SMS reciver.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.java2s.myapplication4.app"> <uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.READ_SMS" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> <activity android:name="com.java2s.myapplication4.app.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="com.java2s.myapplication4.app.SmsReceiver" android:exported="true"> <intent-filter android:priority="5"> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> </application> </manifest>
Main layout xml file
<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" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> </RelativeLayout>
\res\menu\main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/action_settings" android:orderInCategory="100" android:showAsAction="never" android:title="@string/action_settings"/> </menu>
Main Activity Java code
import android.annotation.TargetApi; import android.app.Activity; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.telephony.SmsManager; import android.view.View; import android.widget.Button; /*from w w w. j a va 2 s . co m*/ public class MainActivity extends Activity { private static final String SHORTCODE = "55443"; private static final String ACTION_SENT = "com.java2s.myapplication4.app.SENT"; private static final String ACTION_DELIVERED = "com.java2s.myapplication4.app.DELIVERED"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Button sendButton = new Button(this); sendButton.setText("Hail the Mothership"); sendButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { sendSMS("Beam us up!"); } }); setContentView(sendButton); } private void sendSMS(String message) { PendingIntent sIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_SENT), 0); PendingIntent dIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_DELIVERED), 0); registerReceiver(sent, new IntentFilter(ACTION_SENT)); registerReceiver(delivered,new IntentFilter(ACTION_DELIVERED)); SmsManager manager = SmsManager.getDefault(); manager.sendTextMessage(SHORTCODE, null, message,sIntent, dIntent); } private BroadcastReceiver sent = new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent intent) { switch (getResultCode()) { case Activity.RESULT_OK: break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: case SmsManager.RESULT_ERROR_NO_SERVICE: case SmsManager.RESULT_ERROR_NULL_PDU: case SmsManager.RESULT_ERROR_RADIO_OFF: break; } unregisterReceiver(this); } }; private BroadcastReceiver delivered = new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent intent) { switch (getResultCode()) { case Activity.RESULT_OK: break; case Activity.RESULT_CANCELED: break; } unregisterReceiver(this); } }; }
SmsReceiver.java
import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telephony.SmsMessage; import android.text.TextUtils; import android.util.Log; import android.widget.Toast; /*from ww w . j ava 2 s .co m*/ public class SmsReceiver extends BroadcastReceiver { private static final String SHORTCODE = "55443"; @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); Object[] messages = (Object[])bundle.get("pdus"); SmsMessage[] sms = new SmsMessage[messages.length]; for(int n=0; n < messages.length; n++) { sms[n] = SmsMessage.createFromPdu((byte[]) messages[n]); } for(SmsMessage msg : sms) { if(TextUtils.equals(msg.getOriginatingAddress(), SHORTCODE)) { abortBroadcast(); Toast.makeText(context, "Received message from the mothership: " + msg.getMessageBody(), Toast.LENGTH_SHORT).show(); } } } }