Estoy tratando de hacer una aplicación para contar la cantidad de mensajes SMS salientes desde un teléfono. Actualmente tengo el siguiente código:Android: detectar SMS saliente, cuenta incorrecta
private void listenForSMS(){
Log.v("SMSTEST", "STARTED LISTENING FOR SMS OUTGOING");
Handler handle = new Handler(){};
SMSObserver myObserver = new SMSObserver(handle);
ContentResolver contentResolver = getContentResolver();
contentResolver.registerContentObserver(Uri.parse("content://sms"),true, myObserver);
}
private class SMSObserver extends ContentObserver{
int count = 0;
String lastMessage = null;
public SMSObserver(Handler handler) {
super(handler);
}
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Log.v("SMSTEST", "HIT ON CHANGE");
Uri uriSMSURI = Uri.parse("content://sms");
Cursor cur = getContentResolver().query(uriSMSURI, null, null,
null, null);
cur.moveToNext();
String protocol = cur.getString(cur.getColumnIndex("protocol"));
if(protocol == null){
count++;
Log.v("SMSTEST", "SMS SENT: count: " + count);
String content = cur.getString(cur.getColumnIndex("body"));
}else{
Log.v("SMSTEST", "SMS RECIEVED");
}
}
}
Cuando envío un mensaje SMS de una página, onChange
se llama 3 veces. Cuando envío un mensaje de texto de dos páginas, se llama al onChange
4 veces. Mensaje de 3 páginas, llamado 5 veces; Y así.
NOTA: He intentado otras variaciones de Uri.parse("content://sms")
, como "contenido: // sms/enviado", y nada más que "contenido: // sms" ha recibido onChange
para ser llamado.
¿Cómo puedo distinguir de manera única un mensaje SMS saliente y obtener una cuenta exacta de la cantidad de mensajes SMS enviados?
Encontré una solución que es bastante simple. Simplemente haga un ciclo while y consulte WHERE date> = someTime. –