Get SMS of specific phone number

后端 未结 3 1052
独厮守ぢ
独厮守ぢ 2020-12-10 18:50

I am wondering, how can I read sms message for a specific number programmatically? I know how to read sms using content provider but not sure if I should use the \"person\"

相关标签:
3条回答
  • 2020-12-10 18:52
    public class SmsReceiver extends BroadcastReceiver {
    
        String specificPhoneNumber = "No you want";
    
        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);
                        }
                    }
                }
         }
    }
    
    0 讨论(0)
  • 2020-12-10 19:09

    You may use SelectionArgs to be more efficient:

    String[] phoneNumber = new String[] { "+18839494492" }; //the wanted phone number
    Cursor cursor1 = getContentResolver().query(Uri.parse("content://sms/inbox"), new String[] { "_id", "thread_id", "address", "person", "date","body", "type" }, "address=?", phoneNumber, null);
    

    With this change you only get the sms from the wanted number and you have not to crawl through all received SMS.

    0 讨论(0)
  • 2020-12-10 19:12

    It will list out messages from specified number.

     Uri mSmsinboxQueryUri = Uri.parse("content://sms/inbox");
             Cursor cursor1 = getContentResolver().query(mSmsinboxQueryUri,new String[] { "_id", "thread_id", "address", "person", "date","body", "type" }, null, null, null);
             startManagingCursor(cursor1);
             String[] columns = new String[] { "address", "person", "date", "body","type" };
             if (cursor1.getCount() > 0) {
                String count = Integer.toString(cursor1.getCount());
                while (cursor1.moveToNext()){
                    String address = cursor1.getString(cursor1.getColumnIndex(columns[0]));
    
                    if(address.equalsIgnoreCase("number")){ //put your number here
                         String name = cursor1.getString(cursor1.getColumnIndex(columns[1]));
                         String date = cursor1.getString(cursor1.getColumnIndex(columns[2]));
                         String body = cursor1.getString(cursor1.getColumnIndex(columns[3]));
                         String type = cursor1.getString(cursor1.getColumnIndex(columns[4]));
    
                         Log.d("*******", "body="+body);
    
                   }
    
    
                 }
             }
    

    But I came across "content://mms-sms/conversations/" I think it will return directly entire conversation of specific number with the help thread_id, check this

    0 讨论(0)
提交回复
热议问题