0

このコードは、特定の番号からのすべてのメッセージではなく、特定の番号からの最後のメッセージのみを削除します。すべてのメッセージを削除するにはどうすればよいですか?

アプリケーションを実行する前に3つのメッセージを送信すると、新しいメッセージを受信したときにアプリケーションを実行すると、アプリケーションが停止します。受信トレイからすべてのメッセージを手動で削除し、アプリケーションの開始後に特定の番号からSMSを送信すると、正常に機能します。したがって、このコードを変更して、受信トレイに特定の番号が含まれている以前のメッセージを確認し、それらをすべて削除するにはどうすればよいですか。

public class SmsReceiver extends BroadcastReceiver {    
String specificPhoneNumber = "15555215554";

public void onReceive(Context context, Intent intent) {

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

0 に答える 0