How to read SMS from the inbox or sent folder programmatically in Android:
To read all messages for inbox or sent programmatically in Android use following function.
public List<Sms> getAllSms(String folderName) { List<Sms> lstSms = new ArrayList<Sms>(); Sms objSms = new Sms(); Uri message = Uri.parse("content://sms/"+folderName); ContentResolver cr = mActivity.getContentResolver(); Cursor c = cr.query(message, null, null, null, null); mActivity.startManagingCursor(c); int totalSMS = c.getCount(); if (c.moveToFirst()) { for (int i = 0; i < totalSMS; i++) { objSms = new Sms(); objSms.setId(c.getString(c.getColumnIndexOrThrow("_id"))); objSms.setAddress(c.getString(c .getColumnIndexOrThrow("address"))); objSms.setMsg(c.getString(c.getColumnIndexOrThrow("body"))); objSms.setReadState(c.getString(c.getColumnIndex("read"))); objSms.setTime(c.getString(c.getColumnIndexOrThrow("date"))); lstSms.add(objSms); c.moveToNext(); } } // else { // throw new RuntimeException("You have no SMS in " + folderName); // } c.close(); return lstSms; }
Call above function to get all messages from inbox or send folder.
getAllSms("inbox"); // Get all sms from inbox getAllSms("sent"); // Get all sms from sent
To get all sms from inbox or sent folder use following function
public List<Sms> getAllSms() { List<Sms> lstSms = new ArrayList<Sms>(); Sms objSms = new Sms(); Uri message = Uri.parse("content://sms/"); ContentResolver cr = mActivity.getContentResolver(); Cursor c = cr.query(message, null, null, null, null); mActivity.startManagingCursor(c); int totalSMS = c.getCount(); if (c.moveToFirst()) { for (int i = 0; i < totalSMS; i++) { objSms = new Sms(); objSms.setId(c.getString(c.getColumnIndexOrThrow("_id"))); objSms.setAddress(c.getString(c .getColumnIndexOrThrow("address"))); objSms.setMsg(c.getString(c.getColumnIndexOrThrow("body"))); objSms.setReadState(c.getString(c.getColumnIndex("read"))); objSms.setTime(c.getString(c.getColumnIndexOrThrow("date"))); if (c.getString(c.getColumnIndexOrThrow("type")).contains("1")) { objSms.setFolderName("inbox"); } else { objSms.setFolderName("sent"); } lstSms.add(objSms); c.moveToNext(); } } // else { // throw new RuntimeException("You have no SMS"); // } c.close(); return lstSms; }
Sms class is below:
[sociallocker]
public class Sms{ private String _id; private String _address; private String _msg; private String _readState; //"0" for have not read sms and "1" for have read sms private String _time; private String _folderName; public String getId(){ return _id; } public String getAddress(){ return _address; } public String getMsg(){ return _msg; } public String getReadState(){ return _readState; } public String getTime(){ return _time; } public String getFolderName(){ return _folderName; } public void setId(String id){ _id = id; } public void setAddress(String address){ _address = address; } public void setMsg(String msg){ _msg = msg; } public void setReadState(String readState){ _readState = readState; } public void setTime(String time){ _time = time; } public void setFolderName(String folderName){ _folderName = folderName; } }
Don’t forget to define following permission in your AndroidManifest.xml
<uses-permission android:name="android.permission.READ_SMS" />
[/sociallocker]