Sw0ut
Sw0ut

Reputation: 791

Get contact by thread_id

I was on this topic Android get contact id from thread id where somebody had the exact same question as i'm asking. Unfortunately, lopez.mikhael answered completely not on the target.

How can I get the contact ID with a thread_id from URI content://sms/conversations ? Assuming that it returns :

- thread_id
- snippet
- msg_count

Getting all the contacts is not helping. I've searched in getColumnsNames() from there and I don't see any good column name that would contain a thread_id.

Why is this not documented ? Is it deprecated to use content://sms/ ? Is there any other solution ?

Thank you.

Upvotes: 3

Views: 1527

Answers (1)

Rajen Raiyarela
Rajen Raiyarela

Reputation: 5636

As mentioned here on this post

You can fetch sms-inbox:

    Uri mSmsinboxQueryUri = Uri.parse("content://sms/inbox");
    String where = "thread_id="+ <thread id you get it from content://sms/conversations>;
    Cursor cursor1 = getContentResolver().query(mSmsinboxQueryUri,new String[] { "_id", "thread_id", "address", "person", "date","body", "type" }, where, null, null);
    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]));
               String name = cursor1.getString(cursor1.getColumnIndex(columns[1]));
               String date = cursor1.getString(cursor1.getColumnIndex(columns[2]));
               String msg = cursor1.getString(cursor1.getColumnIndex(columns[3]));
               String type = cursor1.getString(cursor1.getColumnIndex(columns[4]));
        }
    }

You can fetch other sent items by changing the URI.

Uri mSmsinboxQueryUri = Uri.parse("content://sms/sent");

Ones you have phone number you can find contact id using below code

String contactid = null;

ContentResolver contentResolver = getContentResolver();

Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phonenumintolist));

Cursor cursor =  contentResolver.query(
                        uri, 
                        new String[] {PhoneLookup.DISPLAY_NAME, PhoneLookup._ID}, 
                        null, 
                        null, 
                        null);

if(cursor!=null) {
 while(cursor.moveToNext()){
    String contactName = cursor.getString(cursor.getColumnIndexOrThrow(PhoneLookup.DISPLAY_NAME));
    contactid = cursor.getString(cursor.getColumnIndexOrThrow(PhoneLookup._ID));
 }
 cursor.close();
}
if (contactid == null) {
  Toast.makeText(DetailedCallHistory.this, "No contact found associated with this number", Toast.LENGTH_SHORT).show();
}else{
 //You can contact id do what you want to do with it.
}

Upvotes: 2

Related Questions