Intereting Posts
Положите прогрессBar на ActionBar Использовать declare styleable для установки типа ввода пользовательских компонентов Какой из лучших макетов в андроиде мы можем использовать для разработки пользовательского интерфейса? Полный экран + панель действий (Immersive) Распространение приложений для Android за пределами Android Market Как проверить адрес электронной почты? Как вызвать функцию основного действия из пользовательского ArrayAdapter? Действия в onActivityResult и "Ошибка Не удается выполнить это действие после onSaveInstanceState" Как нарисовать гладкий градиент на холсте в Android Растровое изображение слишком велико для загрузки в текстуру Андроид локали беспорядочно изменяет свое значение по умолчанию Создание пользовательского ImageView Push-уведомления в платформе Android Использование CursorLoader без ContentProvider Как вы проверяете, играет ли музыка с помощью широковещательного приемника?

Получите день рождения для каждого контакта в приложении Android

В моем приложении Android я прочитал все контакты со следующим кодом:

ContentResolver cr = getContentResolver(); Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); if (cur.getCount() > 0) { while (cur.moveToNext()) { String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); ContentResolver bd = getContentResolver(); String where = Data.RAW_CONTACT_ID+" = "+id+" and "+Data.MIMETYPE+" = "+CommonDataKinds.Event.CONTENT_ITEM_TYPE; Cursor bdc = bd.query(ContactsContract.Data.CONTENT_URI, null, where, null, null); if (bdc.getCount() > 0) { while (bdc.moveToNext()) { String birthday = bdc.getString(0); Toast.makeText(getApplicationContext(), id+name+birthday, Toast.LENGTH_SHORT); } } } } cur.close(); 

Вот как я пытался зачитывать событие дня рождения для каждого отдельного контакта. Но, очевидно, это пока не работает. Итак, как я могу правильно узнать дату рождения контакта?

Solutions Collecting From Web of "Получите день рождения для каждого контакта в приложении Android"

Осторожно: некоторые OEM-провайдеры предоставляют своего собственного поставщика услуг связи (а не стандартный Android one) и могут не следовать стандартным практикам Android. Например, com.android.providers.contacts.HtcContactsProvider2 отвечает на запросы на моем HTC Desire HD

Вот один из способов:

 // method to get name, contact id, and birthday private Cursor getContactsBirthdays() { Uri uri = ContactsContract.Data.CONTENT_URI; String[] projection = new String[] { ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.CommonDataKinds.Event.CONTACT_ID, ContactsContract.CommonDataKinds.Event.START_DATE }; String where = ContactsContract.Data.MIMETYPE + "= ? AND " + ContactsContract.CommonDataKinds.Event.TYPE + "=" + ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY; String[] selectionArgs = new String[] { ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE }; String sortOrder = null; return managedQuery(uri, projection, where, selectionArgs, sortOrder); } // iterate through all Contact's Birthdays and print in log Cursor cursor = getContactsBirthdays(); int bDayColumn = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Event.START_DATE); while (cursor.moveToNext()) { String bDay = cursor.getString(bDayColumn); Log.d(TAG, "Birthday: " + bDay); } 

Если это не сработает, у вас может быть модифицированный поставщик контактов с OEM.

Каждый день рождения пользователя можно зачитать следующим кодом:

 ContentResolver cr = getContentResolver(); Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); if (cur.getCount() > 0) { while (cur.moveToNext()) { String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); ContentResolver bd = getContentResolver(); Cursor bdc = bd.query(android.provider.ContactsContract.Data.CONTENT_URI, new String[] { Event.DATA }, android.provider.ContactsContract.Data.CONTACT_ID+" = "+id+" AND "+Data.MIMETYPE+" = '"+Event.CONTENT_ITEM_TYPE+"' AND "+Event.TYPE+" = "+Event.TYPE_BIRTHDAY, null, android.provider.ContactsContract.Data.DISPLAY_NAME); if (bdc.getCount() > 0) { while (bdc.moveToNext()) { String birthday = bdc.getString(0); // now "id" is the user's unique ID, "name" is his full name and "birthday" is the date and time of his birth } } } } cur.close(); 

Но есть ли лучший или более короткий способ сделать это?

 ContentResolver cr = getContentResolver(); String where = Data.raw_contacts_id + " = your_id and " + Data.MIMETYPE + " = " + CommonDataKinds.Events.CONTENT_ITEM_TYPE; cr.query(ContactsContract.Data.CONTENT_URI, null, where, null, null); 

Я не тестировал код, так как у меня не установлено sdk на моем компьютере. Но я считаю, что это должно сработать.
Надеюсь, это поможет вам в некоторых аспармах.