如何获取联系人照片URI

cor*_*OLO 10 android android-contentprovider

我正在使用Android Contact ContentProvider.我有一个电话号码,我需要得到URI中的照片与该电话号码相关联的接触.我该怎么做???

我知道我可以获取照片的原始数据并构建一个InputStream,但我不想要输入流,我需要URI.

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

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

Kan*_*esh 11

要使用电话号码获取conatct 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;
  }
Run Code Online (Sandbox Code Playgroud)

并使用获得的联系人ID获取contatc照片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);
  }
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助.

  • 这个getPhotoUri proc在各种可能的方式都是完全错误的...不要使用它...你也需要检查uri的存在..应该删除答案..如果你需要uri从一个读取PHOTO_URI或PHOTO_THUMBNAIL_URI有效URI的内容提供商! (6认同)
  • 完成后不要忘记关闭光标,否则会导致内存泄漏. (4认同)
  • 另外,请务必在应用的清单中包含READ_CONTACTS权限. (2认同)

Pir*_*hah 9

此解决方案演示了如何从用户联系人获取图像,然后将其显示在ImageView.

ImageView profile  = (ImageView)findViewById(R.id.imageView1);                 
Uri my_contact_Uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, String.valueOf(Contact_Id));
InputStream photo_stream = ContactsContract.Contacts.openContactPhotoInputStream(getContentResolver(),my_contact_Uri);            
BufferedInputStream buf =new BufferedInputStream(photo_stream);
Bitmap my_btmp = BitmapFactory.decodeStream(buf);
profile.setImageBitmap(my_btmp);
Run Code Online (Sandbox Code Playgroud)

  • 此外,您可以直接将Uri设置为imageView(使用imageView.setImageURI(uri),而不必自己转换为Bitmap). (4认同)

vid*_*ida 5

这是Android 文档中的代码。

Uri contactUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, contactId);
return Uri.withAppendedPath(contactUri, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);
Run Code Online (Sandbox Code Playgroud)