【问题标题】:How do you get a contact photo through the contact provider in android 2.3.6?如何通过 android 2.3.6 中的联系人提供者获取联系人照片?
【发布时间】:2012-12-15 15:33:53
【问题描述】:

我有这个适用于 android 4 的版本(String email 是一个 gmail 地址):

private Uri getPhotoUriFromEmail(String email) {
    Uri u = null;
    String[] projection = { ContactsContract.CommonDataKinds.Email.PHOTO_URI };
    String photoUri;
    ContentResolver cr = context.getContentResolver();
    Cursor emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, projection,
            ContactsContract.CommonDataKinds.Email.ADDRESS + " = ?", 
            new String[]{email}, null);
    if (emailCur.moveToNext()) { 
        photoUri = emailCur.getString(
                emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.PHOTO_URI));
        u = Uri.parse(photoUri);
    }
    return u;
}

它的 2.3.6 版本是什么? (当我将 API 8 设置为我的最小 API 支持时,android SDK 也不应该警告我使用 API 11 吗?因为它没有......)

【问题讨论】:

    标签: java android android-contacts


    【解决方案1】:

    您可以通过这种方式不使用ContactsContract.CommonDataKinds.Email.PHOTO_URI 获取联系人照片uri:

    private Uri getPhotoUriFromEmail(String email) {
        Uri u = null;
        String[] projection = { ContactsContract.CommonDataKinds.Photo.CONTACT_ID };
        String photoUri;
        ContentResolver cr = getContentResolver();
        Cursor emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, 
                projection,
                ContactsContract.CommonDataKinds.Email.ADDRESS + " = ?",
                new String[]{email}, null);
        if (emailCur.moveToNext()) {
            int columnIndex = emailCur.getColumnIndex(
                                  ContactsContract.CommonDataKinds.Photo.CONTACT_ID);
            long contactId = emailCur.getLong(columnIndex);
    
            u = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, 
                                           contactId);
            u = Uri.withAppendedPath(u, 
                                    ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);
        }
        return u;
    }
    

    或者,您可以通过这种方式使用ContactsContract.Contacts .openContactPhotoInputStream(ContentResolver, Uri) 方法获取照片流:

    private InputStream getPhotoInputStreamFromEmail(String email) {
        Uri u = null;
        String[] projection = { ContactsContract.CommonDataKinds.Photo.CONTACT_ID };
        String photoUri;
        ContentResolver cr = getContentResolver();
        Cursor emailCur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
                projection,
                ContactsContract.CommonDataKinds.Email.ADDRESS + " = ?",
                new String[]{email}, null);
        if (emailCur.moveToNext()) {
            int columnIndex = emailCur.getColumnIndex(
                    ContactsContract.CommonDataKinds.Photo.CONTACT_ID);
            long contactId = emailCur.getLong(columnIndex);
    
            u = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,
                    contactId);
            return ContactsContract.Contacts.openContactPhotoInputStream(cr, u);
        }
        return null;
    }
    

    【讨论】:

    • 谢谢..你拯救了我的一天:)
    猜你喜欢
    • 2014-01-14
    • 2011-09-23
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 2013-01-14
    • 2017-07-10
    • 1970-01-01
    相关资源
    最近更新 更多