2012-02-22 20 views
8

Chciałbym usunąć wiadomość SMS ze skrzynki odbiorczej po jej przeczytaniu przez użytkownika. Jak to zrobić?Usuwanie wiadomości SMS ze skrzynki odbiorczej

Edit:

public class SmsReceiver rozciąga 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"); 
       } 
      } 

     } 

    } 
} 

}

Co jest nie tak z tym kodem? Sms nie jest uzyskiwanie usunięte

Odpowiedz

12

można wykorzystywać następujące metody usuwania wiadomości SMS ze skrzynki odbiorczej,

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

będzie ten kod usunąć wszystkie skrzynki odbiorczej wiadomości – Erum

+0

nie działa w wersji Android 4.3 – NarendraJi

+0

Czy to działa w wersji 5.0.? Używanie tego samego kodu powoduje, że mój kursor jest pusty. – Akshat

10

spróbować to dla kompletnego rozwiązania do usuwania ...

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

Tak, to działało dla mnie. – Tomcat

Powiązane problemy