如何在Android中从收件箱中删除上次收到的短信

如何在Android中从收件箱中删除上次收到的短信,android,Android,我正在开发一个Android应用程序,我想用一些新的文本替换上次收到的短信的正文 我使用的是BroadcastReceiver,我想将上次收到的短信正文存储在一个变量中,并从收件箱中删除短信,现在删除后,我想在收件箱中放入一条新的编码邮件 现在我面临的问题是如何从收件箱中删除上次收到的短信。我已经在这方面开发了一些代码,但它删除了收件箱中的倒数第二条(上一条)短信。请检查我下面的代码,并帮助我继续我的应用程序,我将非常感谢你的这一善举 public void deleteLastSMS()

我正在开发一个Android应用程序,我想用一些新的文本替换上次收到的短信的正文

我使用的是
BroadcastReceiver
,我想将上次收到的短信正文存储在一个变量中,并从收件箱中删除短信,现在删除后,我想在收件箱中放入一条新的编码邮件

现在我面临的问题是如何从收件箱中删除上次收到的短信。我已经在这方面开发了一些代码,但它删除了收件箱中的
倒数第二条
(上一条)短信。请检查我下面的代码,并帮助我继续我的应用程序,我将非常感谢你的这一善举

public void deleteLastSMS()
    {

//      abortBroadcast();

        String body = null;
        String num = null;

        try
        {
            Uri uri = Uri.parse("content://sms/inbox");         
            Cursor c =contex.getContentResolver().query(uri, null, null ,null,null); 
            if(c.moveToFirst()) 
            { 
                body = c.getString(c.getColumnIndexOrThrow("body")).toString();
                num = c.getString(c.getColumnIndexOrThrow("address")).toString();
            }


            int id = c.getInt(0);
            int thread_id = c.getInt(1);
            Uri thread = Uri.parse( "content://sms");
            contex.getContentResolver().delete( thread, "thread_id=? and _id=?", new String[]{String.valueOf(thread_id), String.valueOf(id)} );

        }

        catch(CursorIndexOutOfBoundsException ee)
        {

        }


    }

我从过去一个小时就一直在看这个,这是我找到的东西,希望我能帮忙:)

void deleteMessage(上下文){
Uri Uri=Uri.parse(“content://sms/inbox");
游标c=context.getContentResolver().query(URI,null,null,null,null);
int id=c.getInt(0);
int-thread\u-id=c.getInt(1);//获取线程\u-id
context.getContentResolver().delete(Uri.parse(“content://sms/conversations/“+线程id),空,空);
}
void deleteSMS(上下文){
Uri deleteUri=Uri.parse(“content://sms");
context.getContentResolver().delete(deleteUri,“地址=?和日期=?”,新字符串[]{strMessageFrom,strTimeStamp});
}
公共void deleteSMS1(上下文上下文、字符串消息、字符串编号){
试一试{
Uri Uri=Uri.parse(“content://sms/inbox");
游标c=context.getContentResolver().query(
浪漫主义,
新字符串[]{“\u id”、“线程id”、“地址”、“人”,
“日期”,“正文”},“读=0”,空,空);
如果(c!=null&&c.moveToFirst()){
做{
long id=c.getLong(0);
long threadId=c.getLong(1);
字符串地址=c.getString(2);
字符串体=c.getString(5);
字符串日期=c.getString(3);
Log.e(“Log>>>”,
“0>”+c.getString(0)+“1>”+c.getString(1)
+“2>”+c.getString(2)+“
+c.getString(3)+“4>”+c.getString(4)
+“5>”+c.getString(5));
Log.e(“Log>>>”,“date”+c.getString(0));
如果(消息等于(正文)和地址等于(数字)){
//mLogger.logInfo(“删除id为:+threadId的短信”);
context.getContentResolver().delete(
解析content://sms/“+id),“日期=?”,
新字符串[]{c.getString(4)};
Log.e(“日志>>>”,“删除成功……”);
}
}而(c.moveToNext());
}
}捕获(例外e){
Log.e(“Log>>>”,e.toString());
}
}

您是否在收到短信后立即尝试删除它?这可能是时间问题-当您尝试删除最后一条短信时,短信数据库可能尚未更新。如果不是这样,您可以尝试其他方式删除短信,请参阅
void deleteMessage(Context context){
    Uri uriSms = Uri.parse("content://sms/inbox");
    Cursor c = context.getContentResolver().query(uriSms, null,null,null,null);
    int id = c.getInt(0);
    int thread_id = c.getInt(1); //get the thread_id
    context.getContentResolver().delete(Uri.parse("content://sms/conversations/" + thread_id),null,null);
}

void deleteSMS(Context context){
    Uri deleteUri = Uri.parse("content://sms");
    context.getContentResolver().delete(deleteUri, "address=? and date=?", new String[] {strMessageFrom,strTimeStamp});
}

public void deleteSMS1(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());
    }
}