从收件箱中删除一条短信

Posted

技术标签:

【中文标题】从收件箱中删除一条短信【英文标题】:Delete an sms from inbox 【发布时间】:2012-03-12 11:34:42 【问题描述】:

一旦用户阅读了一条短信,我想从收件箱中删除它。如何做到这一点?

编辑:

公共类 SmsReceiver 扩展广播接收器

@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");
                
            

        

    

这段代码有什么问题?短信没有被删除

【问题讨论】:

【参考方案1】:

您可以使用以下方法从收件箱中删除短信,

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();
        
     

【讨论】:

这可以在 5.0 中使用吗?使用相同的代码将我的光标返回为空。【参考方案2】:

试试这个以获得完整的删除解决方案...

    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());
    

【讨论】:

以上是关于从收件箱中删除一条短信的主要内容,如果未能解决你的问题,请参考以下文章

短信收件箱中对联系人表的错误引用

Android 从收件箱获取短信,优化的方式来阅读所有消息并将它们分组

使用 Phonegap 发送短信并在收件箱中显示

由于短信权限,Google Play 商店删除了我的应用

将收到的 Facebook 消息(聊天 + 消息)转发到我的电子邮件收件箱,然后从我的 Facebook 收件箱中删除它们

接受请求后 Outlook 日历从收件箱中消失