web-dev-qa-db-fra.com

Lire tout SMS d'un expéditeur particulier

Comment puis-je lire tous les SMS d'un expéditeur particulier? Par exemple. Je souhaite scanner a) le corps et b) la date/heure de tous les SMS provenant de 'TM-MYAMEX' vers le téléphone.

Certains sites Web semblent indiquer que cela peut être lu à partir de "contenu: // sms/boîte de réception". Je ne pouvais pas comprendre exactement comment. Je ne sais pas non plus s'il est pris en charge sur la plupart des téléphones. J'utilise un Galaxy S2.

30
KalEl

essayez de cette façon:

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" />
41
ρяσѕρєя K

vous pouvez le faire en quelques lignes de 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);
                }
2
Adiii
 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);
            }
        });

    }

Ici, j'ai ajouté le numéro +919456 comme valeur du champ d'adresse.

En dehors de cela, vous devez ajouter l'autorisation READ_SMS pour manifester:

2
Anubhav

essayez ceci, c'est un moyen facile de lire les messages de la boîte de réception.

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);
}

}

Ajoutez cette autorisation dans les manifestes.

<uses-permission Android:name="Android.permission.READ_SMS"></uses-permission>
2
Tabish khan
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() ;
            } 
        }
    }
  }
 }
}

Je ne sais pas ce que signifie "TM-MYAMEX" mais voici le code pour obtenir tous les SMS.

Date = new Date() parce que son sous un BroadcastReceiveralors le tme vous obtenez le message son l'heure actuelle.

J'espère que cette aide.

1
113408