Search code examples
androiddatabasecursorsmsandroid-4.4-kitkat

Delete a SMS Conversation


Trying to Delete the whole Conversation by using the Number, like this :

 mContext.getContentResolver().delete(Uri.parse("content://sms/"),"address="+Number, null);

But Nothing Happen,No Force Close & its not Deleted, any Help ?,

Thanks


Solution

  • You'll need to do it in two steps. something like this:

    A. Query SMS database by address to obtain your SMS's message id:

     String numberFilter = "address='"+ phoneNumber + "'";
     String messageid = null;
     Cursor cursor = mContext.getContentResolver().query(Uri.parse("content://sms/"), 
                  null, numberFilter, null, null);
    
     if (cursor.moveToFirst()) {
          messageid = cursor.getString(0);
     }
    

    B. Delete SMS using message id:

    getContentResolver().delete(Uri.parse("content://sms/" + messageid), null, null);
    

    Now, for multiple deletions. You reported multi-deletion failed when you use cursor iteration (while cursor.moveToFirst()). I never tried it but I assume

    It has something to do with cursor invalidated after delete. Try instead to restart the cursor before each delete, something like this:

     for (;;) {
         // restart cursor before each delete
         String messageid = null;
         Cursor cursor = mContext.getContentResolver().query(Uri.parse("content://sms/"), 
                      null, numberFilter, null, null);
    
         if (!cursor.moveToFirst()) {
           break; // nothing more to delete
         }
    
         // delete single record
         messageid = cursor.getString(0);
         getContentResolver().delete(Uri.parse("content://sms/" + messageid), null, null);
     }
    

    You will need write SMS permission:

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