2010-12-17 7 views
2

Ich arbeite an einer erweiterten SMS-Anwendung. Und jetzt kann ich alle SMS-Nachrichten von der mmssms.db lesen. In der SMS-Datenbanktabelle gibt das Feld 'person' die '_id' in der Kontakttabelle an. Wenn 'person'> = 1 ist, bedeutet dies, dass die Nachricht von Personen in der Kontaktliste gesendet wird. So kann ich 'ManagedQuery' aus der Kontakttabelle. Aber die Frage ist, in meinem Handy kann das Testprogramm manchmal die Kontakt-Informationen sogar "Person"> = 1 nicht abfragen. So kann mir jemand einige korrekte Möglichkeiten zeigen, Kontakt-Information durch "Person" abzufragen, die in der SMS Tabelle archiviert wird? Hier ist ein Beispielcode, der meine Frage klarer machen:Wie bekomme ich die Kontaktinformation durch SMS-Nachricht

class ContactItem { 
    public String mName; 
} 

    ContactItem getContact(Activity activity, final SMSItem sms) { 
     if(sms.mPerson == 0) return null; 
     Cursor cur = activity.managedQuery(ContactsContract.Contacts.CONTENT_URI, 
       new String[] {PhoneLookup.DISPLAY_NAME}, 
       " _id=?", 
       new String[] {String.valueOf(sms.mPerson)}, null); 
     if(cur != null && 
      cur.moveToFirst()) { 
      int idx = cur.getColumnIndex(PhoneLookup.DISPLAY_NAME); 
      ContactItem item = new ContactItem(); 
      item.mName = cur.getString(idx); 
      return item; 
     } 
     return null; 
    } 

Antwort

6

Ok, da niemand mir helfen, ich versuchte, einig Open-Source-Projekt-Code zu lesen, und ich habe jetzt beantworten. Wie ich am Anfang sollte, ist der beste Weg, um die Kontaktinformationen aus einer SMS-Nachricht abzufragen, wird durch die Zahl (auch als ADDRESS) abfragen:

ContactItem getContactByAddr(Context context, final SMSItem sms) { 
    Uri personUri = Uri.withAppendedPath( 
      ContactsContract.PhoneLookup.CONTENT_FILTER_URI, sms.mAddress); 
    Cursor cur = context.getContentResolver().query(personUri, 
      new String[] { PhoneLookup.DISPLAY_NAME }, 
      null, null, null); 
    if(cur.moveToFirst()) { 
     int nameIdx = cur.getColumnIndex(PhoneLookup.DISPLAY_NAME); 
     ContactItem item = new ContactItem(); 
     item.mName = cur.getString(nameIdx); 
     cur.close(); 
     return item; 
    } 
    return null; 

}

+0

Dank für die Buchung Ihrer Lösung . Ich bin so dankbar! Weißt du ... Ich habe versucht, aus etwa 30 Samples zu lernen, die ich in der letzten Woche online gefunden habe und keiner von ihnen hat wirklich funktioniert. Ich muss einen Weg finden, um es ein wenig zu optimieren, da der Bildschirm für ein paar Sekunden leer ist, während es alle Nachrichten und Kontakte bekommt - aber zumindest bekommt es jetzt alle Kontakte :) – username

Verwandte Themen