2012-02-22 52 views
8

Tôi muốn xóa một SMS khỏi hộp thư đến sau khi người dùng đọc. làm như thế nào?Xóa một tin nhắn từ hộp thư đến

Edit:

public class SmsReceiver kéo dài BroadcastReceiver {

@Override 
public void onReceive(Context context, Intent intent) { 
    // TODO Auto-generated method stub 

    Bundle bundle = intent.getExtras();   
    SmsMessage[] msgs = null; 
    String address = null; 

    if(bundle!=null) { 
     String info = " "; 
     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]);     
       address=msgs[i].getDisplayOriginatingAddress(); 
       info += msgs[i].getMessageBody().toString(); 

     } 
     /*String str=bundle.getString("state"); 
     Log.v("State",str);*/ 

     if((PhoneNumberUtils.isWellFormedSmsAddress(address))){    //set ! and address length 

     //abortBroadcast(); 
     Log.v("phone num","wellformed"); 
      Uri deleteUri = Uri.parse("content://sms"); 

      Cursor c = context.getContentResolver().query(deleteUri, null, null, 
        null, null); 
      while (c.moveToNext()) { 
       try { 
        // Delete the SMS 
        String pid = c.getString(0); // Get id; 
        String uri = "content://sms/conversations/" + pid; 
        context.getContentResolver().delete(Uri.parse(uri), 
          null, null); 
       } catch (Exception e) { 
        Log.v("exception","occurred"); 
       } 
      } 

     } 

    } 
} 

}

Điều gì là sai với mã này? Sms không bị xóa

Trả lời

12

Bạn có thể sử dụng phương pháp sau đây để xóa tin nhắn SMS từ Inbox,

private void deleteMessage() 
{ 
    Cursor c = getContentResolver().query(SMS_INBOX, null, null, null, null); 
    //c.moveToFirst(); 

    while (c.moveToNext()) 
    { 
     System.out.println("Inside if loop"); 

     try 
     { 
      String address = c.getString(2); 
      String MobileNumber = mainmenu.getParameterData().getMobileNumber().trim(); 

      //Log.i(LOGTAG, MobileNumber + "," + address); 

      Log.i(LOGTAG, c.getString(2)); 


      if (address.trim().equals(MobileNumber)) 
      { 
       String pid = c.getString(1); 
       String uri = "content://sms/conversations/" + pid; 
       getContentResolver().delete(Uri.parse(uri), null, null); 
       stopSelf(); 
      } 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

sẽ mã này xóa tất cả các hộp thư đến tin nhắn – Erum

+0

không hoạt động trên phiên bản Android 4.3 – NarendraJi

+0

Thao tác này có hoạt động ở 5.0 không? Sử dụng cùng một mã sẽ trả về con trỏ của tôi trống. – Akshat

10

thử này cho giải pháp hoàn chỉnh cho việc xóa ...

public void deleteSMS(Context context, String message, String number) { 
    try { 
     Uri uriSms = Uri.parse("content://sms/inbox"); 
     Cursor c = context.getContentResolver().query(
       uriSms, 
       new String[] { "_id", "thread_id", "address", "person", 
         "date", "body" }, "read=0", null, null); 

     if (c != null && c.moveToFirst()) { 
      do { 
       long id = c.getLong(0); 
       long threadId = c.getLong(1); 
       String address = c.getString(2); 
       String body = c.getString(5); 
       String date = c.getString(3); 
       Log.e("log>>>", 
         "0>" + c.getString(0) + "1>" + c.getString(1) 
           + "2>" + c.getString(2) + "<-1>" 
           + c.getString(3) + "4>" + c.getString(4) 
           + "5>" + c.getString(5)); 
       Log.e("log>>>", "date" + c.getString(0)); 

       if (message.equals(body) && address.equals(number)) { 
        // mLogger.logInfo("Deleting SMS with id: " + threadId); 
        context.getContentResolver().delete(
          Uri.parse("content://sms/" + id), "date=?", 
          new String[] { c.getString(4) }); 
        Log.e("log>>>", "Delete success........."); 
       } 
      } while (c.moveToNext()); 
     } 
    } catch (Exception e) { 
     Log.e("log>>>", e.toString()); 
    } 
} 
+0

Vâng, nó làm việc cho tôi. – Tomcat

Các vấn đề liên quan