Domanda

Attualmente sto facendo uno SMS la visualizzazione delle applicazioni e utilizzare il ContentResolver di ottenere tutti i messaggi SMS sul telefono (sì, ho capito i rischi). Come altre applicazioni, voglio gruppo tutti i messaggi dalla stessa persona a un filo, visualizzare l'ultimo messaggio da loro, e ordinare i contatti in base alla data dell'ultimo messaggio.

Quando si tratta dei valori degli indirizzi dei messaggi in arrivo, tutti contengono il codice del paese (ad esempio 44.123.456,789 mila). Ma quando l'utente salva i suoi contatti, avrebbe potuto ignorare il codice del paese e semplicemente digitare il formato locale. Così tutti i messaggi in uscita vengono memorizzati come 0123456789.

Quindi, il database conterrà lo stesso indirizzo in entrambi i formati, 44.123.456,789 mila e 0123456789. Come si fa a corrispondere a questo 2 e rimuovere l'indirizzo duplicato?

Nota: 1) I messaggi dalla stessa persona non possono avere lo stesso "filo id" 2) Non ci può essere un "Contact ID" / valore "nome di visualizzazione" per l'indirizzo

È stato utile?

Soluzione

In realtà, i messaggi da e verso lo stesso contatto sono nello stesso thread, quindi hanno la stessa ID_Thread. (A parte più messaggi di destinatari, che sono nel loro proprio thread).

Osservando nel contenuto: // sms e memorizzare un elenco di thread_ids ottenuti è possibile assicurarsi che non c'è duplicati. Con il valore di indirizzo è possibile utilizzare il seguente codice per ottenere il nome di visualizzazione.

Ora, io sto cercando di ottimizzare questo:

private String quickCallerId(String phoneNumber){
    Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
    ContentResolver resolver=getContentResolver();
    Cursor cur = resolver.query(uri, new String[]{PhoneLookup.DISPLAY_NAME}, null, null, null);
    if(cur!=null&&cur.moveToFirst()){
            String value=cur.getString(cur.getColumnIndex(PhoneLookup.DISPLAY_NAME));
            if(value!=null){ 
                cur.close();
                return value;
            }
    }
    cur.close();
    return "";
}

Altri suggerimenti

Non ho il codice su di me, ma è abbastanza facile da analizzare una stringa da destra a sinistra. Si potrebbe fare questo e semplicemente impostare un limite arbitrario su come precisa deve essere quello di arresto.

Per esempio (pseudo-codice), in 2 stringhe (stringa1 e stringa2):

if first-char = '+'
  len = 9
else
  len = length(string1)
end
len = min(len, length(string2))
match = true
for i = len to 1
  if substr( string2, i, 1) != substr( string2, i, 1)
    match = false
    quit
  end
  i--
end

Si potrebbe ottenere più elaborato controllando i caratteri immediatamente dopo il segno '+' per determinare il codice del paese, il che consente di sapere quanto tempo che i numeri di telefono del paese rischiano di essere.

Si sarebbe anche bisogno di verificare la presenza di persone che entrano numeri come per esempio '(123) 456-7890 x1234' se è una possibilità. Quindi potrebbe essere più semplice da utilizzare alcune espressioni regolari variante ...

Rory

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top