Mega Code Archive

 
Categories / Android / Network
 

Extends BroadcastReceiver to create SMS Receiver

package app.test; 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.telephony.SmsMessage; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; class SMSReceiver extends BroadcastReceiver {   @Override   public void onReceive(Context context, Intent intent) {     Bundle bundle = intent.getExtras();     SmsMessage[] msgs = null;     String str = "";     if (bundle != null) {       Object[] pdus = (Object[]) bundle.get("pdus");       msgs = new SmsMessage[pdus.length];       for (int i = 0; i < msgs.length; i++) {         msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);         str += "SMS from " + msgs[i].getOriginatingAddress();         str += " :";         str += msgs[i].getMessageBody().toString();         str += "\n";       }       Toast.makeText(context, str, Toast.LENGTH_SHORT).show();       Intent mainActivityIntent = new Intent(context, Test.class);       mainActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);       context.startActivity(mainActivityIntent);       Intent broadcastIntent = new Intent();       broadcastIntent.setAction("SMS_RECEIVED_ACTION");       broadcastIntent.putExtra("sms", str);       context.sendBroadcast(broadcastIntent);     }   } } public class Test extends Activity {   Button btnSendSMS;   IntentFilter intentFilter;   private BroadcastReceiver intentReceiver = new BroadcastReceiver() {     @Override     public void onReceive(Context context, Intent intent) {       TextView SMSes = (TextView) findViewById(R.id.textView1);       SMSes.setText(intent.getExtras().getString("sms"));     }   };   @Override   public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.main);     intentFilter = new IntentFilter();     intentFilter.addAction("SMS_RECEIVED_ACTION");     registerReceiver(intentReceiver, intentFilter);     btnSendSMS = (Button) findViewById(R.id.btnSendSMS);     btnSendSMS.setOnClickListener(new View.OnClickListener() {       public void onClick(View v) {         sendSMS("5554", "Hello my friends!");         Intent i = new Intent(android.content.Intent.ACTION_VIEW);         i.putExtra("address", "5556; 5558; 5560");         i.putExtra("sms_body", "Hello my friends!");         i.setType("vnd.android-dir/mms-sms");         startActivity(i);       }     });   }   @Override   protected void onResume() {     super.onResume();   }   @Override   protected void onPause() {     super.onPause();   }   @Override   protected void onDestroy() {     unregisterReceiver(intentReceiver);     super.onPause();   }   /*    * private void sendSMS(String phoneNumber, String message) { SmsManager sms    * = SmsManager.getDefault(); sms.sendTextMessage(phoneNumber, null,    * message, null, null); }    */   private void sendSMS(String phoneNumber, String message) {     String SENT = "SMS_SENT";     String DELIVERED = "SMS_DELIVERED";     PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(         SENT), 0);     PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,         new Intent(DELIVERED), 0);     registerReceiver(new BroadcastReceiver() {       @Override       public void onReceive(Context arg0, Intent arg1) {         switch (getResultCode()) {         case Activity.RESULT_OK:           Toast.makeText(getBaseContext(), "SMS sent",               Toast.LENGTH_SHORT).show();           break;         case SmsManager.RESULT_ERROR_GENERIC_FAILURE:           Toast.makeText(getBaseContext(), "Generic failure",               Toast.LENGTH_SHORT).show();           break;         case SmsManager.RESULT_ERROR_NO_SERVICE:           Toast.makeText(getBaseContext(), "No service",               Toast.LENGTH_SHORT).show();           break;         case SmsManager.RESULT_ERROR_NULL_PDU:           Toast.makeText(getBaseContext(), "Null PDU",               Toast.LENGTH_SHORT).show();           break;         case SmsManager.RESULT_ERROR_RADIO_OFF:           Toast.makeText(getBaseContext(), "Radio off",               Toast.LENGTH_SHORT).show();           break;         }       }     }, new IntentFilter(SENT));     registerReceiver(new BroadcastReceiver() {       @Override       public void onReceive(Context arg0, Intent arg1) {         switch (getResultCode()) {         case Activity.RESULT_OK:           Toast.makeText(getBaseContext(), "SMS delivered",               Toast.LENGTH_SHORT).show();           break;         case Activity.RESULT_CANCELED:           Toast.makeText(getBaseContext(), "SMS not delivered",               Toast.LENGTH_SHORT).show();           break;         }       }     }, new IntentFilter(DELIVERED));     SmsManager sms = SmsManager.getDefault();     sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);   } } //main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:orientation="vertical"     android:layout_width="fill_parent"     android:layout_height="fill_parent"     > <Button      android:id="@+id/btnSendSMS"       android:layout_width="fill_parent"      android:layout_height="wrap_content"     android:text="Send SMS" />          <TextView      android:id="@+id/textView1"      android:layout_width="wrap_content"      android:layout_height="wrap_content" />      </LinearLayout>