Read all SMS from a particular sender

前端 未结 5 1192
傲寒
傲寒 2020-11-30 22:53

How do I read all SMSes from a particular sender to me? E.g. I want to scan a) the body, and b) the date/time of all SMSes that came from \'TM-MYAMEX\' to the phone.

相关标签:
5条回答
  • 2020-11-30 22:59
    public class SmsController extends BroadcastReceiver {
    
    @Override
    public void onReceive(Context context, Intent intent) {
    SmsMessage msgs[] = null;
    Bundle bundle = intent.getExtras();
    try {
        Object pdus[] = (Object[]) bundle.get("pdus");
        msgs = new SmsMessage[pdus.length];
        for (int n = 0; n < pdus.length; n++) {
            byte[] byteData = (byte[]) pdus[n];
            msgs[n] = SmsMessage.createFromPdu(byteData);
        }
    } catch (Exception e) {
    
    }
    for (int i = 0; i < msgs.length; i++) {
        String message = msgs[i].getDisplayMessageBody();
        if (message != null && message.length() > 0) {
            String from = msgs[i].getOriginatingAddress();
            if(FROM.contains("TM-MYAMEX")){
                String  body = message ;
                Date datetime = new Date() ;
                } 
            }
        }
      }
     }
    }
    

    I'm not sure of what does "TM-MYAMEX" means but here is the code to get all SMS.

    Date = new Date()beacause its under a BroadcastReceiverthen the tme you get the message its the current time.

    Hope this help.

    0 讨论(0)
  • 2020-11-30 23:02
     protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            inbox = (Button) findViewById(R.id.inbox);
            list = (ListView) findViewById(R.id.list);
            arlist = new ArrayList<String>();
            inbox.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Uri inboxUri = Uri.parse("content://sms/inbox");
                    String[] reqCols = {"_id", "body", "address"};
                    ContentResolver cr = getContentResolver();
                    Cursor cursor = cr.query(inboxUri, reqCols, "address='+919456'", null, null);
                    adapter = new SimpleCursorAdapter(getApplicationContext(), R.layout.msg_content_layout, cursor,
                            new String[]{"body", "address"}, new int[]{R.id.txt1, R.id.txt2});
                    list.setAdapter(adapter);
                }
            });
    
        }
    

    Here I have added the number +919456 as the value of the address field.

    Apart from this you need to add the READ_SMS permission to manifest:

    0 讨论(0)
  • 2020-11-30 23:07

    try this way:

    StringBuilder smsBuilder = new StringBuilder();
           final String SMS_URI_INBOX = "content://sms/inbox"; 
            final String SMS_URI_ALL = "content://sms/";  
            try {  
                Uri uri = Uri.parse(SMS_URI_INBOX);  
                String[] projection = new String[] { "_id", "address", "person", "body", "date", "type" };  
                Cursor cur = getContentResolver().query(uri, projection, "address='123456789'", null, "date desc");
                 if (cur.moveToFirst()) {  
                    int index_Address = cur.getColumnIndex("address");  
                    int index_Person = cur.getColumnIndex("person");  
                    int index_Body = cur.getColumnIndex("body");  
                    int index_Date = cur.getColumnIndex("date");  
                    int index_Type = cur.getColumnIndex("type");         
                    do {  
                        String strAddress = cur.getString(index_Address);  
                        int intPerson = cur.getInt(index_Person);  
                        String strbody = cur.getString(index_Body);  
                        long longDate = cur.getLong(index_Date);  
                        int int_Type = cur.getInt(index_Type);  
    
                        smsBuilder.append("[ ");  
                        smsBuilder.append(strAddress + ", ");  
                        smsBuilder.append(intPerson + ", ");  
                        smsBuilder.append(strbody + ", ");  
                        smsBuilder.append(longDate + ", ");  
                        smsBuilder.append(int_Type);  
                        smsBuilder.append(" ]\n\n");  
                    } while (cur.moveToNext());  
    
                    if (!cur.isClosed()) {  
                        cur.close();  
                        cur = null;  
                    }  
                } else {  
                    smsBuilder.append("no result!");  
                } // end if  
                }
            } catch (SQLiteException ex) {  
                Log.d("SQLiteException", ex.getMessage());  
            }  
    

    AndroidManifest.xml:

    <uses-permission android:name="android.permission.READ_SMS" />
    
    0 讨论(0)
  • 2020-11-30 23:10

    you can do this in few line of code

    String[] phoneNumber = new String[] { "+923329593103" }; 
    Cursor cursor1 = getContentResolver().query(Uri.parse("content://sms/inbox"), new String[] { "_id", "thread_id", "address", "person", "date","body", "type" }, "address=?", phoneNumber, null);
                     StringBuffer msgData = new StringBuffer();
                    if (cursor1.moveToFirst()) { 
                        do {
    
    
                           for(int idx=0;idx<cursor1.getColumnCount();idx++)
                           {
                               msgData.append(" " + cursor1.getColumnName(idx) + ":" + cursor1.getString(idx));
                           }
    
                        } while (cursor1.moveToNext());
                    } else {
    
                         edtmessagebody.setText("no message from this contact"+phoneNumber);
                    }
    
    0 讨论(0)
  • 2020-11-30 23:16

    try this, its a easy way for reading message from inbox.

    public class ReadMsg extends AppCompatActivity {
    
    ListView listView;
    private static final int PERMISSION_REQUEST_READ_CONTACTS = 100;
    ArrayList smsList;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_read_msg);
        listView = (ListView)findViewById(R.id.idList);
    
        int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS);
    
        if (permissionCheck == PackageManager.PERMISSION_GRANTED){
            showContacts();
        }else{
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_SMS},PERMISSION_REQUEST_READ_CONTACTS);
        }
    }
    
    private void showContacts() {
        Uri inboxURI = Uri.parse("content://sms/inbox");
        smsList = new ArrayList();
        ContentResolver cr = getContentResolver();
    
    
        Cursor c = cr.query(inboxURI,null,null,null,null);
        while (c.moveToNext()){
            String Number = c.getString(c.getColumnIndexOrThrow("address")).toString();
            String Body= c.getString(c.getColumnIndexOrThrow("body")).toString();
            smsList.add("Number: "+ Number + "\n" + "Body: "+ Body );
        }
            c.close();
        ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, smsList);
        listView.setAdapter(adapter);
    }
    

    }

    Add this permission into Manifests.

    <uses-permission android:name="android.permission.READ_SMS"></uses-permission>
    
    0 讨论(0)
提交回复
热议问题