I am wondering, how can I read sms message for a specific number programmatically? I know how to read sms using content provider but not sure if I should use the "person" column or "address" column or totally different way Please help Thanks
Asked
Active
Viewed 1.0k times
3 Answers
7
It will list out messages from specified number.
Uri mSmsinboxQueryUri = Uri.parse("content://sms/inbox");
Cursor cursor1 = getContentResolver().query(mSmsinboxQueryUri,new String[] { "_id", "thread_id", "address", "person", "date","body", "type" }, null, null, null);
startManagingCursor(cursor1);
String[] columns = new String[] { "address", "person", "date", "body","type" };
if (cursor1.getCount() > 0) {
String count = Integer.toString(cursor1.getCount());
while (cursor1.moveToNext()){
String address = cursor1.getString(cursor1.getColumnIndex(columns[0]));
if(address.equalsIgnoreCase("number")){ //put your number here
String name = cursor1.getString(cursor1.getColumnIndex(columns[1]));
String date = cursor1.getString(cursor1.getColumnIndex(columns[2]));
String body = cursor1.getString(cursor1.getColumnIndex(columns[3]));
String type = cursor1.getString(cursor1.getColumnIndex(columns[4]));
Log.d("*******", "body="+body);
}
}
}
But I came across "content://mms-sms/conversations/"
I think it will return directly entire conversation of specific number with the help thread_id
, check this
-
Hello , Thanks for the answer but this does not answer my question. Here you are saying how I can ready a received sms. My question is, I have a specific number "xxxxxxxx", how can I get all the messages from the inbox that were sent by this number. So there is nothing related to the onReceive as it is an activity that read inbox SMS and go through them to try to find the sms of a specific phone number – Snake Feb 06 '13 at 15:58
-
I smell you have dual sim, now you want to fetch all messages which sent by specific number, but this sentence is not clear, what you are upto by this `how can I get all the messages from the inbox that were sent by this number.`??? Because inbox contain received messages not sent and you want sent messages from inbox, its not make any sense. – RobinHood Feb 07 '13 at 04:46
-
I am not referring to "sent" messages. I am referring to "received messages". If you read my comment above carefully you will find I am asking about the message sent "BY" this number not "To". In other words, I am looking for messages received from this number. I dont want to listen to message received currently, but to messages recieved in the past. For example, I want to know the messages received yesterday from number xxxx. – Snake Feb 07 '13 at 05:15
-
Are the phone numbers normalised? Shouldn't `android.telephony.PhoneNumberUtils.compare` be used here? – Flimm Nov 22 '18 at 12:12
-
I have 2 sims in my phone! Is it possible to check which sim is receiving message? – Huzaifa Asif Oct 03 '19 at 07:10
2
You may use SelectionArgs to be more efficient:
String[] phoneNumber = new String[] { "+18839494492" }; //the wanted phone number
Cursor cursor1 = getContentResolver().query(Uri.parse("content://sms/inbox"), new String[] { "_id", "thread_id", "address", "person", "date","body", "type" }, "address=?", phoneNumber, null);
With this change you only get the sms from the wanted number and you have not to crawl through all received SMS.

Flitzpiepe
- 167
- 2
- 8
-
Does this normalise phone numbers? What if the search query has the international prefix, for example? – Flimm Nov 22 '18 at 12:13
0
public class SmsReceiver extends BroadcastReceiver {
String specificPhoneNumber = "No you want";
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]);
String phNum = msgs[i].getOriginatingAddress();
str += msgs[i].getMessageBody().toString();
if (specificPhoneNumber.equals(phNum))
{
Uri uri = Uri.parse("content://sms/inbox");
ContentResolver contentResolver = context.getContentResolver();
String where = "address="+phNum;
Cursor cursor = contentResolver.query(uri, new String[] { "_id", "thread_id"}, where, null,
null);
while (cursor.moveToNext()) {
long thread_id = cursor.getLong(1);
where = "thread_id="+thread_id;
Uri thread = Uri.parse("content://sms/inbox");
context.getContentResolver().delete(thread, where, null);
}
Intent l = new Intent(context,AgAppMenu.class);
l.putExtra("msg",str);
l.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(l);
}
}
}
}
}

baldguy
- 2,090
- 1
- 16
- 25
-
Does this normalise phone numbers? What if the search query has the international prefix, for example? – Flimm Nov 22 '18 at 12:13