如何获取联系人的照片URI

6 浏览
0 Comments

如何获取联系人的照片URI

我正在使用Android Contact ContentProvider。我有一个电话号码,需要获取与该电话号码相关联的联系人照片的URI。我应该如何做到这一点?我知道可以获取照片的原始数据并构建一个InputStream,但我不需要InputStream,我需要URI。

编辑:最初我使用以下代码获取联系人信息

    Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNo));
    Cursor cursor = context.getContentResolver().query(uri, details, null, null, null);

0
0 Comments

如何获取联系人照片URI

在以下代码中使用手机号码获取联系人ID:

import android.provider.ContactsContract.PhoneLookup;
public String fetchContactIdFromPhoneNumber(String phoneNumber) {
    Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,
        Uri.encode(phoneNumber));
    Cursor cursor = this.getContentResolver().query(uri,
        new String[] { PhoneLookup.DISPLAY_NAME, PhoneLookup._ID },
        null, null, null);
    String contactId = "";
    if (cursor.moveToFirst()) {
        do {
        contactId = cursor.getString(cursor
            .getColumnIndex(PhoneLookup._ID));
        } while (cursor.moveToNext());
    }
    return contactId;
}

然后使用获取到的联系人ID来获取联系人照片URI。使用以下代码获取照片URI:

import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
public Uri getPhotoUri(long contactId) {
    ContentResolver contentResolver = getContentResolver();
    try {
        Cursor cursor = contentResolver
            .query(ContactsContract.Data.CONTENT_URI,
                null,
                ContactsContract.Data.CONTACT_ID
                    + "="
                    + contactId
                    + " AND "
                    + ContactsContract.Data.MIMETYPE
                    + "='"
                    + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE
                    + "'", null, null);
        if (cursor != null) {
        if (!cursor.moveToFirst()) {
            return null; // no photo
        }
        } else {
        return null; // error in cursor process
        }
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
    Uri person = ContentUris.withAppendedId(
        ContactsContract.Contacts.CONTENT_URI, contactId);
    return Uri.withAppendedPath(person,
        ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);
}

请确保在Manifest文件中包含READ_CONTACTS权限,并在完成后关闭游标以避免内存泄漏。

获取照片URI的方法是完全错误的,请不要使用它。您还需要检查URI的存在性。应该删除答案。如果您需要URI,请从内容提供程序中读取PHOTO_URI或PHOTO_THUMBNAIL_URI以获得有效的URI!

很容易在没有任何示例的情况下告诉不应该做什么以及应该做什么。请提供您的解决方案。

0
0 Comments

如何获取联系人照片的URI

问题出现的原因:

在Android开发中,有时候我们需要获取联系人的照片URI。然而,直接使用ContactsContract.Contacts.Photo.CONTENT_DIRECTORY并不能直接获取到联系人照片的URI,这就导致了问题的出现。

解决方法:

根据Android开发文档中的代码示例,我们可以通过以下步骤来获取联系人照片的URI。

首先,我们需要构建一个联系人的URI,该URI是由ContactsContract.Contacts.CONTENT_URI和联系人的ID(contactId)组成的。具体代码如下:

Uri contactUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, contactId);

接下来,我们可以通过使用Uri.withAppendedPath方法将联系人URI与ContactsContract.Contacts.Photo.CONTENT_DIRECTORY进行拼接,从而获取到联系人照片的URI。具体代码如下:

return Uri.withAppendedPath(contactUri, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);

通过以上代码,我们可以解决如何获取联系人照片的URI的问题。

0
0 Comments

如何获取联系人照片URI的出现原因是代码中缺少了`buf`变量的声明,导致编译错误。为了解决这个问题,可以修改代码,添加`buf`变量的声明:

BufferedInputStream buf = new BufferedInputStream(photo_stream);

同时,可以直接将URI设置为ImageView的图片,而不需要自己转换为Bitmap。可以使用`imageView.setImageURI(uri)`方法来实现。

关于将照片存储到数据库的问题,可以使用URI或者Bitmap的链接来存储。

0