¿Cómo puedo leer los mensajes SMS (bandeja de entrada) y actualizarlos en tiempo real en mi aplicación en Android?
He podido recuperar los mensajes SMS y mostrarlos en mi aplicación correctamente, pero quiero que se actualicen automáticamente a medida que se reciben. ¿Alguna ayuda?
Aquí está mi código:
public void refreshSmsInbox() {
ContentResolver contentResolver = getContentResolver();
Cursor smsInboxCursor = contentResolver.query(Telephony.Sms.CONTENT_URI, null, null, null, null);
int totalSMs;
int Id = adapter.getItemCount();
if (Id >= 0) {
if (smsInboxCursor != null) {
totalSMs = smsInboxCursor.getCount();
if (smsInboxCursor.moveToFirst()) {
for (int j = 0; j < totalSMs; j++) {
indexBody = smsInboxCursor.getString(smsInboxCursor.getColumnIndexOrThrow(Telephony.Sms.BODY));
indexAddress = smsInboxCursor.getString(smsInboxCursor.getColumnIndexOrThrow(Telephony.Sms.ADDRESS));
indexDate = smsInboxCursor.getString(smsInboxCursor.getColumnIndexOrThrow(Telephony.Sms.DATE));
dateFormat = new Date(smsInboxCursor.getShort(0));
smsModel.add(new SmsModel(Id, indexAddress, indexBody, dateFormat.toString(), messageSender));
adapter.setSmsModel(smsModel);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
smsInboxCursor.moveToNext();
}
}
} else {
Toast.makeText(this, "No hay mensajes para mostrar", Toast.LENGTH_SHORT).show();
}
}
}
davy.ai
Para actualizar automáticamente los SMS a medida que se reciben, se puede utilizar un ContentObserver. Puede crear una clase que extienda ContentObserver y anular el método onChange() para activar una actualización de su bandeja de entrada de SMS. Aquí hay un ejemplo:
En su actividad, puede registrar el observador utilizando el siguiente código:
Esto asegurará que se detecten cualquier cambio en la bandeja de entrada de SMS y se llame al método
refreshSmsInbox()
del adaptador para actualizar la pantalla.