Frage

Ich erstelle derzeit eine SMS -Anzeigeanwendung und verwende den ContentResolver, um alle SMS -Nachrichten auf dem Telefon zu erhalten (ja, ich verstehe die Risiken). Wie bei anderen Anwendungen möchte ich alle Nachrichten von derselben Person zu einem Thread gruppieren, die neueste Nachricht von ihnen anzeigen und die Kontakte nach Datum der letzten Nachricht bestellen.

Wenn es um die Adresswerte der eingehenden Nachrichten geht, enthalten sie alle den Ländercode (z. B. +44123456789). Wenn der Benutzer jedoch seine Kontakte speichert, konnte er den Ländercode ignorieren und einfach das lokale Format eingeben. Alle ausgehenden Nachrichten werden also als 0123456789 gespeichert.

Die Datenbank enthält also die gleiche Adresse in beiden Formaten, +44123456789 und 0123456789. Wie stimmen Sie mit dieser 2 überein und entfernen die doppelte Adresse?

HINWEIS: 1) Nachrichten von derselben Person haben möglicherweise nicht dieselbe "Thread -ID" 2) Es gibt möglicherweise keine "Kontakt -ID"/"Anzeigename" Wert für die Adresse

War es hilfreich?

Lösung

Tatsächlich befinden sich Nachrichten an und aus demselben Kontakt im selben Thread, daher haben sie denselben Thread_ID. (Abgesehen von mehreren Empfängernachrichten, die sich in ihrem eigenen Thread befinden).

Wenn Sie sich in den Inhalt ansehen: // SMS und eine Liste erhaltener Thread_IDs speichern, können Sie sicherstellen, dass keine Duplikate vorhanden sind. Mit dem Adresswert können Sie den folgenden Code verwenden, um den Anzeigenamen zu erhalten.

Jetzt versuche ich dies zu optimieren:

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

Andere Tipps

Ich habe nicht den Code bei mir, aber es ist ziemlich einfach, eine Zeichenfolge von rechts nach links zu analysieren. Sie könnten dies tun und einfach eine willkürliche Grenze dafür festlegen, wie genau es sein muss, um anzuhalten.

Zum Beispiel (Pseudo-Code) mit 2 Zeichenfolgen (String1 und String2):

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

Sie könnten schicker werden, indem Sie die Zeichen unmittelbar nach dem Zeichen "+" überprüfen, um den Ländercode zu bestimmen, wodurch Sie wissen, wie lange die Telefonnummern des Landes wahrscheinlich sein werden.

Sie müssten auch nach Personen suchen, die Zahlen als z. '(123) 456-7890 x1234' eingeben, wenn dies eine Möglichkeit ist. Es könnte also einfacher sein, eine Regexp -Variante zu verwenden ...

Rory

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top