Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Android: detecta SMS saliente, cuenta incorrecta

Estoy tratando de hacer una aplicación para contar el número de mensajes SMS salientes desde un teléfono. Actualmente tengo el siguiente código:

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 SMS de dos páginas, onChange se llama 4 veces. Mensaje de 3 páginas, llamado 5 veces; Y así.

NOTA: He intentado otras variaciones de Uri.parse("content://sms") , como "content: // sms / sent", y nada más que "content: // sms" ha llegado a onChange para ser llamado .

¿Cómo puedo distinguir un mensaje SMS saliente y obtener un recuento preciso del número de mensajes SMS enviados?

  • Cómo obtener lista de sms como convesations en cada dispositivo Android 2.2+
  • Iniciar una intención de mensaje SMS ya no funciona para el nuevo sistema operativo RAZR ICS de Droid
  • Receptor de radiodifusión dentro de un servicio
  • Ir a SMS Pro sobreponiendo android.provider.Telephony.SMS_RECEIVED
  • Enviar un mensaje SMS (UTF-16) con un carácter desconocido reemplazado por un "carácter de reemplazo" en Android
  • Lanzar la aplicación android cuando se pulsa un enlace en SMS
  • Prueba "real" del receptor de sms
  • ¿Cómo acceder al almacenamiento de SMS en Android?
  • 3 Solutions collect form web for “Android: detecta SMS saliente, cuenta incorrecta”

    Tenga en cuenta que, al enviar un mensaje SMS, se guardará el estado del mensaje. Para solucionarlo, comprueba el tipo de registros que int type = c.getInt(c.getColumnIndex("type")); 3 veces en cambio ():
    1er: tipo = 6
    2do: tipo = 4
    3er: type = 2 (éxito)
    Entonces usted puede aumentar su contador.
    Este caso se aplica para 1 destinatario solamente.
    Si hay mucho más 1 destinatario, necesita repetir "thread_id" y "visto" para obtener el tipo. Puede comprobar cuántos mensajes se envían con éxito.
    ¡Buena suerte!

    Encontré una solución a mi problema. Los SMS y los MMS pueden distinguirse únicamente por su valor _id.

     Uri uriSMSURI = Uri.parse("content://sms"); Cursor cur = getContentResolver().query(uriSMSURI, null, null, null, null); cur.moveToNext(); String id = cur.getString(cur.getColumnIndex("_id")); 

    ¿Cómo puedo distinguir un mensaje SMS saliente y obtener un recuento preciso del número de mensajes SMS enviados?

    No puedes.

    Este proveedor de contenido no forma parte del SDK de Android. Su uso es indocumentado y no está soportado. Además, la forma en que cualquier cliente de mensajería determinado (por ejemplo, la aplicación Messenger de AOSP) podría utilizarlo es en sí mismo indocumentada y no está soportada. Un solo SMS enviado podría dar lugar a 1.337 cambios en el proveedor de contenido, y no tiene forma de saberlo. Además, no hay ningún requisito para que los mensajes SMS salientes se registren en este proveedor o en ningún otro. Y, si el comportamiento reciente es una indicación, es posible que Google cierre el acceso de terceros a este proveedor de contenido en el futuro.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.