android - 从 Android 联系人中获取联系人姓名和姓氏

标签 android android-contacts device

我正在构建一个需要从 Android 联系人中选择联系人的应用。我这样做并在我的应用程序中使用以下代码从所选联系人中检索姓名和姓氏(在 onActivityResult 中)。

Cursor namesc = getContentResolver().query( ContactsContract.Data.CONTENT_URI, null, ContactsContract.Data.CONTACT_ID + " = " + id,null, null);
if (namesc.moveToFirst()) {
String name = namesc.getString(namesc.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME));
String family = namesc.getString(namesc
.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME));
String middle = namesc.getString(namesc
.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME));

它在 HTC 手机和其他一些手机中运行良好,但在许多 SE Xperia 型号和一些三星设备中它不能给我姓名和家庭并返回 null。谁能帮帮我?

最佳答案

这是我使用的代码:

        String structuredNameWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
        String[] structuredNameWhereParams = new String[]{id, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE}; 
        cursor = resolver.query(ContactsContract.Data.CONTENT_URI, null, structuredNameWhere, structuredNameWhereParams, null); 
        if (cursor.moveToFirst()) 
        { 
            String StructuredNameId = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName._ID));
            String prefix = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.PREFIX));
            String givenName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME));
            String middleName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME));
            String familyName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME));
            String suffix = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.SUFFIX));
        }

我真正看到的唯一区别是我将 mime 类型添加到 where 参数并且我检索数据的方式略有不同。

关于android - 从 Android 联系人中获取联系人姓名和姓氏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12995436/

相关文章:

android - 防止 webview Activity 中的多个实例

javascript - 我无法在 phonegap 中连接多个页面

android - 创建的联系人未显示在 HTC Evo 上

c# - 无法弄清楚如何检查生物识别是否存在

java.lang.RuntimeException : Method code too large

Android:从电话号码中检索联系人姓名

android - 修改Android中已有的联系人

android - Android应用程序调试的瓶颈是什么?

linux - 如何获取USB存储设备的设备名称?

android - RxJava - 等到重试完成其他 Activity/fragment 中的其他可观察对象