I am creating an SMS Application to send and receive SMS.
I am able to send SMS using the following code:
SmsManager sms = SmsManager.getDefault();
What you need to do is register a BroadcastReceiver
object. Check out this article for more information.
If you want to hide SMS messages from the primary inbox, you'll need to delete them from the SMS ContentProvider and use your own SQLite database to store them. Also be sure to mark them as read in the content provider to remove the notification from the tray.
U can send and recieve message using SMSMAnager class. U can implement custom Reciever that on msg recieved it will notify user that message has arrived.. Here i am attaching code that i have written to send and receive message using Custom Broadcast reciever, It might be useful to u. Note: This is for the version 1.6 above..So make sure that u do it in 2.0 or 2.2 preferably.
Go through it and try to implement it..
public class SMS extends Activity {
Button btnSendSMS;
EditText txtPhoneNo;
EditText txtMessage;
Button addcontact;
EditText phonePhoneno;
private static final int CONTACT_PICKER_RESULT = 1001;
private static final String DEBUG_TAG = "";
String phoneNo="";
String phonenofromcontact="";
String finallistofnumberstosendmsg ="";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnSendSMS = (Button) findViewById(R.id.btnSendSMS);
txtPhoneNo = (EditText) findViewById(R.id.txtPhoneNo);
txtMessage = (EditText) findViewById(R.id.txtMessage);
addcontact =(Button) findViewById(R.id.addphonenofromcontact);
addcontact.setOnClickListener(new View.OnClickListener()
{
public void onClick(View V)
{
Intent ContactPickerIntent = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(ContactPickerIntent, CONTACT_PICKER_RESULT);
}
}
);
btnSendSMS.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
String message = txtMessage.getText().toString();
phoneNo = txtPhoneNo.getText().toString();
String phoneNo1= phonePhoneno.getText().toString();
// Sending message to both the written and added contact...
finallistofnumberstosendmsg +=phoneNo1 + phoneNo;
String phoneFinal= phoneNo + finallistofnumberstosendmsg;
//StringTokenizer st=new StringTokenizer(finallistofnumberstosendmsg,",");
StringTokenizer st=new StringTokenizer(phoneFinal,",");
while (st.hasMoreElements())
{
String tempMobileNumber = (String)st.nextElement();
if(tempMobileNumber.length()>0 && message.trim().length()>0) {
sendSMS(tempMobileNumber, message);
}
else
{
Toast.makeText(getBaseContext(),
"Please enter both phone number and message.",
Toast.LENGTH_SHORT).show();
}
}
}
});
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK)
{
switch (requestCode)
{
case CONTACT_PICKER_RESULT:
Cursor cursor=null;
try
{
Uri result = data.getData();
Log.v(DEBUG_TAG, "Got a contact result: " + result.toString());
// get the contact id from the Uri
String id = result.getLastPathSegment();
// query for everything contact number
cursor = getContentResolver().query(
Phone.CONTENT_URI, null,
Phone.CONTACT_ID + "=?",
new String[]{id}, null);
cursor.moveToFirst();
int phoneIdx = cursor.getColumnIndex(Phone.DATA);
if (cursor.moveToFirst())
{
phonenofromcontact = cursor.getString(phoneIdx);
finallistofnumberstosendmsg +=","+phonenofromcontact;
Log.v(DEBUG_TAG, "Got phone no : " + phonenofromcontact);
}
else
{
Log.w(DEBUG_TAG, "No results");
}
}
catch(Exception e)
{
Log.e(DEBUG_TAG, "Failed to get contact number", e);
}
finally
{
if (cursor != null)
{
cursor.close();
}
}
phonePhoneno= (EditText)findViewById(R.id.Phonenofromcontact);
phonePhoneno.setText(finallistofnumberstosendmsg);
//phonePhoneno.setText(phonenofromcontact);
if(phonenofromcontact.length()==0)
{
Toast.makeText(this, "No contact number found for this contact",
Toast.LENGTH_LONG).show();
}
break;
}
}
else
{
Log.w(DEBUG_TAG, "Warning: activity result not ok");
}
}
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);
//---when the SMS has been sent---
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));
//---when the SMS has been delivered---
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);
}
}
// This class notify and receive messages
public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//---get the SMS message passed in---
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
String str = "";
if (bundle != null)
{
//---retrieve the SMS message received---
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";
}
//---display the new SMS message---
Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
}
}
}
Thanks... rakesh
I don't think you can place sms in different inboxes and you don't listen to a port to get SMS you use a BroadcastReceiver
.
I would recommend you to go through the open source smspopup app to get a better idea of how things work for sms in general.
You can send your this received broadcast to your main activity using intent. And on your main activity receive this intent and append the data to the list view as a inbox.
OR the bast but lengthy way
Add this data (received number and message) to the SQL database and on the main activity fatch the data from data base and append to the list view called inbox.In this way your inbox data will be saved even if the phone is switched off or if application is shut down.