使用Entity Uri在Sony Xperia SP上获取联系信息

时间:2014-09-16 09:31:34

标签: android android-contacts contactscontract sony-xperia

我正在开发一个处理联系人和日历的应用程序。

我很难使用特定设备Sony Xperia SP,但我无法找到其他人遇到同样的问题。

我尝试使用Android Api中提供的Entity Uri获取设备的联系人的显示名称和电话号码: http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.Entity.html

不幸的是,这个代码在三星Galaxy S4的推进上运行良好,在那里我得到了我查询的所有细节, 但是在索尼Xperia SP上,我得到了一个非法的例子,在堆栈跟踪中有详细说明: 无效的列名显示名称。

以下是我使用的代码:

ContentResolver cr = context.getContentResolver();
Uri rawUri = RawContacts.CONTENT_URI;
String[] rawProjection = { RawContacts._ID };
String rawSelection = RawContacts.ACCOUNT_NAME + " = ? AND " + RawContacts.ACCOUNT_TYPE + " = ?";
String[] rawSelectionArgs = new String[] { account.name, account.type };

    Cursor rawCursor = cr.query(rawUri, rawProjection, rawSelection, rawSelectionArgs, null);

    while (rawCursor.moveToNext()) {

        long contactId = rawCursor.getLong(0);

        Uri entityUri = Uri.withAppendedPath(ContentUris.withAppendedId(rawUri, contactId), Entity.CONTENT_DIRECTORY);
        String[] entityProjection = new String[] { Data.DISPLAY_NAME, CommonDataKinds.Phone.NORMALIZED_NUMBER };
        String entitySelection = Entity.MIMETYPE + " = ?";
        String[] entitySelectionArgs = new String[] { CommonDataKinds.Phone.CONTENT_ITEM_TYPE };
        Cursor entityCursor = cr.query(entityUri, entityProjection, entitySelection, entitySelectionArgs, null);

        while (entityCursor.moveToNext()) {
            String name = entityCursor.getString(entityCursor.getColumnIndex(Data.DISPLAY_NAME));
            String number = entityCursor.getString(entityCursor.getColumnIndex(CommonDataKinds.Phone.NORMALIZED_NUMBER));
        }

        entityCursor.close();

    }

我试图将我的entityQuery的投影设为null,以查找此查询返回的字段,实际上,返回的字段与设备上的字段不同,

有谁知道为什么这些字段在Sony Xperia SP上不可见,我可以在那里使用哪种解决方法?

1 个答案:

答案 0 :(得分:-1)

确保您已授予阅读联系人权限。选择联系时,我有同样的问题。

<uses-permission android:name="android.permission.READ_CONTACTS" />