4

私は、各連絡先の誕生日を現在の日付と照合する必要があるAndroidアプリケーションに取り組んでおり、肯定的な場合は、完全な連絡先の詳細を必要とするビジネスロジックを処理します。

連絡先の誕生日または連絡先自体を別々に読み取る方法を見つけましたが、両方を組み合わせる方法について混乱しています。誰かが方向性を教えてくれませんか。

ありがとう

4

1 に答える 1

9

Webで調べた後、答えを見つけました。これを行う方法は次のとおりです。

  • 連絡先のリストを取得する
  • 連絡先ごとに contactId を取得します
  • contactid を使用して誕生日を取得する

以下はコード スニペットです。

ContentResolver cr = getContentResolver(); //getContnetResolver()
String[] projection = new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME };

Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, projection, null, null,
            ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");

while (cur.moveToNext()) {

   Map<String, String> contactInfoMap = new HashMap<String, String>();
   String contactId = cur.getString(cur.getColumnIndex(ContactsContract.Data._ID));
   String displayName =  cur.getString(cur.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));     

    String columns[] = {
         ContactsContract.CommonDataKinds.Event.START_DATE,
         ContactsContract.CommonDataKinds.Event.TYPE,
         ContactsContract.CommonDataKinds.Event.MIMETYPE,
    };

    String where = Event.TYPE + "=" + Event.TYPE_BIRTHDAY + 
                    " and " + Event.MIMETYPE + " = '" + Event.CONTENT_ITEM_TYPE + "' and "                  + ContactsContract.Data.CONTACT_ID + " = " + contactId;

    String[] selectionArgs = null;
    String sortOrder = ContactsContract.Contacts.DISPLAY_NAME;

    Cursor birthdayCur = cr.query(ContactsContract.Data.CONTENT_URI, columns, where, selectionArgs, sortOrder); 
    if (birthdayCur.getCount() > 0) {
        while (birthdayCur.moveToNext()) {
             String birthday = birthdayCur.getString(birthdayCur.getColumnIndex(ContactsContract.CommonDataKinds.Event.START_DATE));
        }
    }
    birthdayCur.close();

   }    

    cur.close();
于 2012-05-28T09:44:56.433 に答える