0

我使用此代码从特定电话号码获取 SMS 消息,然后打开我的应用程序。

它工作正常,但在从特定电话号码获取短信后,它不会从收件箱中删除短信。

我正在使用模拟器进行测试,请帮助告诉我代码中的错误是什么?如何从特定号码中删除短信???

public class SmsReceiver extends BroadcastReceiver {

    String specificPhoneNumber = "15555215554";

    public void onReceive(Context context, Intent intent) 
    {
            //---get the SMS message passed in---
            Bundle bundle = intent.getExtras();        
            SmsMessage[] msgs = null;
            String str = "";  

            if (bundle != null)
            {         
                //---retrieve the SMS message received---
                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]);
                    String phNum = msgs[i].getOriginatingAddress();  
                    str += msgs[i].getMessageBody().toString();
             if (specificPhoneNumber.equals(phNum))

            {
                Uri uri = Uri.parse("content://sms/inbox");

                ContentResolver contentResolver = context.getContentResolver();

                String where = "address="+phNum;
                Cursor cursor = contentResolver.query(uri, new String[] { "_id", "thread_id"}, where, null,
                                  null);

                while (cursor.moveToNext()) {

                    long thread_id = cursor.getLong(1);
                    where = "thread_id="+thread_id;
                    Uri thread = Uri.parse("content://sms/inbox");
                    context.getContentResolver().delete(thread, where, null);

                }
                        Intent l = new Intent(context,AgAppMenu.class);                  
                        l.putExtra("msg",str);                   
                        l.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        context.startActivity(l);
                    }
                }
            }
     }
}
4

2 回答 2

1

只是不要让来自特定号码的消息传递到收件箱。为此,请执行以下操作:

  1. 为您的 SmsReceiver 设置高优先级

    <receiver android:name="SmsReceiver">
        <intent-filter android:priority="999">
            <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
        </intent-filter>
    </receiver>
    
  2. 用于abortBroadcast()防止特定消息传递到收件箱。

于 2013-09-10T17:39:52.553 回答
0

您可以尝试以下更改 -

Uri uri = Uri.parse("content://sms/inbox");

对于查询 -

String where = "address="+phNum;
Cursor cursor = contentResolver.query(uri, new String[] { "_id", "thread_id"}, where, null,
                  null);

线程 id 将是第二个元素 -

long thread_id = cursor.getLong(1);
where = "thread_id="+thread_id;
Uri thread = Uri.parse("content://sms/inbox");
context.getContentResolver().delete(thread, where, null);
于 2012-09-14T06:21:43.090 回答