当前位置: 首页 > 面试题库 >

获取Android应用程序中每个联系人的生日

连正信
2023-03-14
问题内容

在我的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();

这就是我试图为每个联系人读出生日事件的方式。但是显然它还不起作用。那么,如何正确读出联系人的生日?


问题答案:

温馨提示: 某些OEM会提供自己的联系人提供商(不是标准的Android提供商),并且 可能
未遵循标准的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修改的联系人提供程序。



 类似资料:
  • 我开始学习Android编程,有一个这样的任务: 创建Android应用程序,在其中实现以下功能: 问题出现在文件末尾的handler.java行中: 对于“setid”、“setname”和“setphone”,我得到了错误:“这一行有多个标记-标记上的语法错误,相反需要AnnotationName-标记”setid“上的语法错误,该标记后需要标识符-标记上的语法错误”(“,delete thi

  • 问题内容: 我正在使用一个简单的短信应用程序,正在使用以下代码在加载线程列表时获取线程ID,但是我不知道如何使用线程ID获取联系人ID。我是root用户,并且使用root资源管理器,我可以在数据库中看到一个带有以下各列的联系人表 因此,由于我具有线程ID,因此我应该能够获取联系人ID,但我还需要确保该方法在所有设备上均有效。我的应用不是root用户 获取线程ID的代码 问题答案: 我恢复所有联系人

  • 问题内容: 是否可以在一个查询中完成? 据我所知sim联系人的内容uri是 问题答案: 这很容易!:)

  • 本文向大家介绍Android获取手机联系人信息,包括了Android获取手机联系人信息的使用技巧和注意事项,需要的朋友参考一下 Android如何获取手机联系人信息,本文为大家揭晓。 获取手机联系人信息步骤: 1、获取 ContentResolver ContentResolver resolver = getContentResolver(); 2、resolver.query(*)查询信息 查

  • 我正在开发一个可以创建用户配置文件的应用程序。我需要能够看到谁从我的联系人已经安装了应用程序,以便我能够授予他们访问我的个人资料和看到他们的个人资料。 我知道有可能通过使用Apple API获得联系人列表,但我是否必须将所有信息发送到服务器,以检查他们是否安装了该应用程序? 谢谢你。

  • 有没有一种方法可以启动联系人应用程序,并在任何flutter应用程序中选择联系人号码。 我设法只使用包启动,但无法找到将选定联系人返回应用程序的方法, 请有人告诉我如何在Flatter移动应用程序中做到这一点。 非常感谢,马希