ver tiempo sigue recuperar que puedo privado porque para mensajes mensaje mandar historial enviar enviados eliminar directos como borrar alguien android sms

android - tiempo - recuperar mensajes directos twitter



Lee todos los SMS de un remitente en particular (5)

¿Cómo leo todos los SMS de un remitente en particular? Por ejemplo, quiero escanear a) el cuerpo yb) la fecha / hora de todos los SMS que vinieron de ''TM-MYAMEX'' al teléfono.

Algunos sitios web parecen indicar que esto se puede leer en "content: // sms / inbox". No pude averiguar exactamente cómo. Tampoco estoy seguro si es compatible con la mayoría de los teléfonos. Estoy usando un Galaxy S2.


Puedes hacer esto en pocas líneas de código

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


prueba de esta manera

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" />


prueba esto, es una manera fácil de leer el mensaje desde la bandeja de entrada.

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

}

Agregue este permiso en Manifiestos.

<uses-permission android:name="android.permission.READ_SMS"></uses-permission>


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

Aquí he agregado el número +919456 como el valor del campo de dirección.

Aparte de esto, debe agregar el permiso READ_SMS para manifestar:


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

No estoy seguro de lo que significa "TM-MYAMEX" pero aquí está el código para obtener todos los SMS .

Date = new Date() debido a que está bajo un BroadcastReceiver entonces el tiempo que recibe el mensaje es la hora actual.

Espero que esto ayude.