Android: rilevare il count in output e contatore non valido

Sto provando a fare un'applicazione per contare il numero di messaggi SMS in output da un telefono. Al momento ho il seguente codice:

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

Quando invio un messaggio SMS a una pagina, la onChange viene chiamata 3 volte. Quando invio un messaggio SMS a due pagine, onChange viene chiamato 4 volte. Messaggio di 3 pagine, chiamato 5 volte; E così via.

  • Distribuisci app tramite Google Play Store in un canale privato senza Google Apps?
  • Come get solo i contatti preferiti / starizzati utilizzando ContattiContract
  • Aggiungi token all'intestazione di Android API Vimeo
  • Appcompat v7: 23
  • Caricamento di Android Studio Gradle
  • La function close () di SQLiteDatabase causa NullPointerException quando più thread
  • NOTA: Ho provato altre variazioni di Uri.parse("content://sms") , ad esempio "content: // sms / sent" e nient'altro che "content: // sms" ha ottenuto onChange per essere chiamato .

    Come posso distinguere in modo univoco un messaggio SMS in output e get un count preciso del numero di messaggi SMS inviati?

  • Invio di file tramite Bluetooth utilizzando l'azione Intent SEND non funziona in android 4.2.2?
  • Creazione di Gridview con immagini cliccabili, Android
  • Devo creare un servizio per il monitoraggio GPS APP?
  • Come fare compressione Bitmap senza modificare la dimensione bitmap?
  • Volley lento e causando perdite di memory
  • Shrink la libreria di Google Play Services per l'utilizzo solo con Google Analytics
  • 3 Solutions collect form web for “Android: rilevare il count in output e contatore non valido”

    Notare che, quando si invia un messaggio SMS, verrà salvato lo stato del messaggio. Per risolverlo, controlli il tipo di record che int type = c.getInt(c.getColumnIndex("type")); 3 volte onchange ():
    Primo: tipo = 6
    Secondo: tipo = 4
    Terzo: tipo = 2 (successo)
    allora puoi aumentare il tuo contatore.
    Questo caso è applicato solo per 1 destinatario.
    Se ci sono molto di più 1 destinatario, è necessario richiedere "thread_id" e "visto" per get il tipo. Puoi controllare quanti messaggi vengono inviati.
    In bocca al lupo!

    Ho trovato una soluzione al mio problema. SMS e MMS possono essere distinti in modo univoco per il loro valore _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")); 

    Come posso distinguere in modo univoco un messaggio SMS in output e get un count preciso del numero di messaggi SMS inviati?

    Non puoi.

    Questo fornitore di contenuti non fa parte dell' SDK di Android. Il suo utilizzo non è documentato e non è supportto. Inoltre, come un qualsiasi client di messaggistica (ad esempio, l'applicazione AOSP Messenger) potrebbe utilizzarlo, è in sé documentato e non supportto. Un singolo SMS inviato potrebbe causare 1.337 modifiche al provider di contenuti e non si ha modo di sapere. Inoltre, non è richiesto che i messaggi SMS in output siano persino registrati in questo o in qualsiasi provider di contenuti. E se il comportmento recente è alcuna indicazione, è ansible che Google chiuda in futuro l'accesso di terze parti a questo fornitore di contenuti.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.