2010-12-17 10 views
2

私はSMSアプリケーションを拡張しています。そして今、私はmmssms.dbからすべてのSMSメッセージを読むことができます。 SMSデータベーステーブルのフィールド 'person'は、連絡先テーブルの '_id'を示します。 'person'が> = 1の場合、連絡先リストのユーザーからメッセージが送信されます。だから、私は 'contactQuery'からコンタクトテーブル。しかし、私の携帯電話では、テストプログラムが「人」> = 1という連絡先情報を照会できないことがあります。ここで は私の質問をより明確にすることができ、いくつかのサンプルコードです:SMSで連絡先情報を取得する方法

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

答えて

6

[OK]を、誰も私を助けていないがあるので、私はいくつかのオープンソースプロジェクトのコードを読み込もうとしましたが、私は今答えました。私が先頭になっているように、SMSメッセージから連絡先情報を照会するための最良の方法は、NUMBER(もアドレスとして知っている)で照会することである:あなたのソリューションを投稿するための

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

感謝。私はとても感謝しています!あなたは知っている...私は先週オンラインで見つけた約30のサンプルから勉強しようとしましたが、実際には働いていませんでした。あなたの作品は完璧に動作します。私はそれがすべてのメッセージと連絡先を取得している間、画面が数秒間空白であるので、それを少し最適化する方法を見つける必要があります - しかしatleastは今すべての連絡先を取得します:) – username

関連する問題