Showing posts with label db. Show all posts
Showing posts with label db. Show all posts

Friday, December 20, 2013

Android: How to send SMS


Add Permission into Manifest

    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.WRITE_SMS" />
    <uses-permission android:name="android.permission.READ_SMS" />



Add API into Source
private void sendSMS(String m_phoneNumber, final String m_smsMessage)
{      
    String SENT         = "SMS_SENT";
    String DELIVERED = "SMS_DELIVERED";
     
    Log.d(TAG, "In sendSMS()");

    PendingIntent sentPI    
                             = PendingIntent.getBroadcast(this, 0, new Intent(SENT),      0);
    PendingIntent deliveredPI
                             = PendingIntent.getBroadcast(this, 0, new Intent(DELIVERED), 0);
             
    Log.d(TAG, "sendTextMessage() : number = " + m_phoneNumber
                                                                     + ", Message = " + m_smsMessage);
     
    // Write SMS data into DB
    ContentValues values = new ContentValues();
    values.put("address",   m_phoneNumber.replace("-", ""));
    values.put("body",       m_smsMessage);
    values.put("protocol",  MESSAGE_TYPE_SENT);
    getContentResolver().insert(Uri.parse("content://sms/sent"), values);
     
    // Send Text Message
    SmsManager.getDefault().sendTextMessage(m_phoneNumber.replace("-", ""),
                                                               null, m_smsMessage, sentPI, deliveredPI);
}

Android: Saving SMS data into DB

We can send the SMS by using the below API.
    SmsManager.getDefault().sendTextMessage()

But it is not saved into the conversation list.
For this reason, we can't know what message is sent.

Now, I wanna let you know how to save it.

1. Add <uses-permission>

    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.WRITE_SMS" />
    <uses-permission android:name="android.permission.READ_SMS" />


2. Add Code
    public class TestActivity extends Activity {

        public static final int MESSAGE_TYPE_ALL    = 0;
        public static final int MESSAGE_TYPE_INBOX  = 1;
        public static final int MESSAGE_TYPE_SENT   = 2;
        public static final int MESSAGE_TYPE_DRAFT  = 3;
        public static final int MESSAGE_TYPE_OUTBOX = 4;
        public static final int MESSAGE_TYPE_FAILED = 5; // for failed outgoing messages
        public static final int MESSAGE_TYPE_QUEUED = 6; // for messages to send later



       @Override
        protected void onCreate(Bundle savedInstanceState) {

             ContentValues values = new ContentValues();

             values.put("address",  m_phoneNumber.replace("-", ""));
             values.put("body",       m_smsMessage);
             values.put("protocol",  MESSAGE_TYPE_SENT);
             getContentResolver().insert(Uri.parse("content://sms/sent"), values);

    In this point, "content://sms/sent" is really really important.
    Please take a look at the below picture.
    The left side is MT SMS and right side is MO SMS.

    "content://sms/sent"   : Save as MO SMS
    "content://sms/inbox" : Save as MT SMS