Android 删除传入的sms @覆盖 公共void onReceive(上下文、意图){ Bundle=intent.getExtras(); SmsMessage[]msgs=null; if(bundle!=null){ Object[]pdus=(Object[])bundle.get(“pdus”); msgs=新SMS消息[PDU.length]; 对于(int i=0;i

Android 删除传入的sms @覆盖 公共void onReceive(上下文、意图){ Bundle=intent.getExtras(); SmsMessage[]msgs=null; if(bundle!=null){ Object[]pdus=(Object[])bundle.get(“pdus”); msgs=新SMS消息[PDU.length]; 对于(int i=0;i,android,sms,Android,Sms,未删除新传入的短消息。当我从该号码收到短消息时,它只删除来自该发件人的旧短消息,而不删除新消息。我需要从特定号码删除新传入的短消息(请参阅源代码)。请尝试以下代码: @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); SmsMessage[] msgs = null; if (bundle != null) {

未删除新传入的短消息。当我从该号码收到短消息时,它只删除来自该发件人的旧短消息,而不删除新消息。我需要从特定号码删除新传入的短消息(请参阅源代码)。

请尝试以下代码:

    @Override
public void onReceive(Context context, Intent intent) {
    Bundle bundle = intent.getExtras();
    SmsMessage[] msgs = null;

    if (bundle != null) {
        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]);
            if (msgs[i].getOriginatingAddress().equals(
                    SmsModuleActivity.number))
                deleteMessage(context, msgs[i]);
        }
    }
}

private void deleteMessage(Context context, SmsMessage msg) {
    Uri deleteUri = Uri.parse("content://sms/inbox/");
    Cursor c = context.getContentResolver().query(deleteUri, null, null,
            null, null);
    while (c.moveToNext()) {
        try {
            String pid = c.getString(0);
            String uri = "content://sms/inbox/" + pid;
            ContentValues values = new ContentValues();
            values.put("read", true);
            context.getContentResolver().update(Uri.parse(uri), values,
                    null, null);
            context.getContentResolver().delete(Uri.parse(uri), null, null);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
请尝试以下代码:

    @Override
public void onReceive(Context context, Intent intent) {
    Bundle bundle = intent.getExtras();
    SmsMessage[] msgs = null;

    if (bundle != null) {
        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]);
            if (msgs[i].getOriginatingAddress().equals(
                    SmsModuleActivity.number))
                deleteMessage(context, msgs[i]);
        }
    }
}

private void deleteMessage(Context context, SmsMessage msg) {
    Uri deleteUri = Uri.parse("content://sms/inbox/");
    Cursor c = context.getContentResolver().query(deleteUri, null, null,
            null, null);
    while (c.moveToNext()) {
        try {
            String pid = c.getString(0);
            String uri = "content://sms/inbox/" + pid;
            ContentValues values = new ContentValues();
            values.put("read", true);
            context.getContentResolver().update(Uri.parse(uri), values,
                    null, null);
            context.getContentResolver().delete(Uri.parse(uri), null, null);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

您可以使用
abortBroadcast()
代替
deleteMessage(context,msgs[i])
,这将阻止传入的短消息到达收件箱,您不需要删除它。

您可以使用
abortBroadcast()
代替
deleteMessage(context,msgs[i])
这将阻止传入的短消息到达收件箱,您不需要删除它。

在第一个活动类中收到短消息后,使用此代码删除最后一条短消息。不要忘记 在mainfest文件中切换sms读写权限

int id = cursor.getInt(cursor.getColumnIndex("_id"));
getContentResolver().delete(Uri.parse("content://sms/"), "_id="+id, null);

在第一个活动类中收到短信后,使用此代码删除最后一条短信。不要忘记 在mainfest文件中切换sms读写权限

int id = cursor.getInt(cursor.getColumnIndex("_id"));
getContentResolver().delete(Uri.parse("content://sms/"), "_id="+id, null);

不,我需要删除新收到的短信。但它没有删除,它只删除此号码中的旧短信。某些效果与第一篇文章中的效果相同。不,我需要删除新收到的短信。但它没有删除,它只删除此号码中的旧短信。某些效果与第一篇文章中的效果相同。不是删除新收到的短信:(使用BroadcastReceiver删除传入消息。某些效果与第一篇文章相同。它不是删除新传入的sms:(使用BroadcastReceiver删除传入消息)。