Android Get Contact Picture from Call Log

后端 未结 5 1146
南笙
南笙 2020-12-18 13:07

It was pretty easy to get the Contact picture when querying the People.CONTENT_URI, with a simple

People.loadContactPhoto(activity, ContentUr         


        
相关标签:
5条回答
  • 2020-12-18 13:40

    All above answer is correct.You can also get photo by this...

    c.getString(c.getColumnIndex(CallLog.Calls.CACHED_PHOTO_URI));

    work in SDK >=23

    if you are working with minimum SDK...

    Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(num));
            uri = ((phone_uri != null) ? Uri.parse(phone_uri) : uri);
            Cursor cursor = getContext().getContentResolver().query(uri, null, null, null, null);
    
            if (cursor != null) {
                if (cursor.moveToNext()) {
                    String id = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup._ID));
                    String name = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME));
                    image_uri = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.PHOTO_URI));
                    Log.d(TAG, "name " + name + " id "+id+" image_uri "+ image_uri);
                }
                cursor.close();
            }
    
    0 讨论(0)
  • 2020-12-18 13:41

    I'm doing it in this way:

    ContentResolver cr=this.getContentResolver();
    Cursor cc = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
    while (cc.moveToNext())
    {
        contactId = cc.getString(cc.getColumnIndex(ContactsContract.Contacts._ID));
        Uri contactPhotoUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.parseLong(contactId));
        InputStream is=ContactsContract.Contacts.openContactPhotoInputStream(cr, contactPhotoUri);
        //blah-blah
    }
    
    0 讨论(0)
  • 2020-12-18 13:51

    Then, you must try to get the contact ID by using the queried call log fields. So, you can implement something like this:

    private String getContactIdFromNumber(String number) {
        String[] projection = new String[]{Contacts.Phones._ID};
        Uri contactUri = Uri.withAppendedPath(Contacts.Phones.CONTENT_FILTER_URL,
            Uri.encode(number));
        Cursor c = getContentResolver().query(contactUri, projection,
            null, null, null);
        if (c.moveToFirst()) {
            String contactId=c.getString(c.getColumnIndex(Contacts.Phones._ID));
            return contactId;
        }
        return null;
    }
    

    Then, you can use that contact ID to get the photo. Something like this in your case:

    cursorLog.moveToFirst();
    String number = cursorLog.getString(cursorLog.getColumnIndex(android.provider.CallLog.Calls.NUMBER));
    contactId = getContactIdFromNumber(number)
    People.loadContactPhoto(activity, ContentUris.withAppendedId(People.CONTENT_URI, contactId);
    // blah blah blah
    
    0 讨论(0)
  • 2020-12-18 13:52

    This one works fine for me..

    private void contactPickedFromLog(Intent data) {
        // TODO Auto-generated method stub
        String contactNumber = data.getStringExtra(CONTACT_NUMBER);
        Cursor cursor = getContentResolver().query(
                Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,
                        Uri.decode(contactNumber)),
                new String[] { PhoneLookup._ID }, null, null, null);
        if(cursor.moveToFirst()){
        long contactId = cursor.getLong(0);
        InputStream inputStream = Contacts.openContactPhotoInputStream(
                getContentResolver(),
                ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId));
        if(inputStream!=null)
        Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
        }
    }  
    
    0 讨论(0)
  • 2020-12-18 13:56

    Try this ...

    public Bitmap getPhoto(String phoneNumber) {
        Uri phoneUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
        Uri photoUri = null;
        ContentResolver cr = getContentResolver();
        Cursor contact = cr.query(phoneUri,
                new String[] { ContactsContract.Contacts._ID }, null, null, null);
    
        if (contact.moveToFirst()) {
            long userId = contact.getLong(contact.getColumnIndex(ContactsContract.Contacts._ID));
            photoUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, userId);
    
        }
        else {
            Bitmap defaultPhoto = BitmapFactory.decodeResource(getResources(), R.drawable.ic_contact_picture);
            return getCircleBitmap(defaultPhoto);
        }
        if (photoUri != null) {
            InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(
                    cr, photoUri);
            if (input != null) {
                return getCircleBitmap(BitmapFactory.decodeStream(input));
            }
        } else {
            Bitmap defaultPhoto = BitmapFactory.decodeResource(getResources(), R.drawable.ic_contact_picture);
            return getCircleBitmap(defaultPhoto);
        }
        Bitmap defaultPhoto = BitmapFactory.decodeResource(getResources(), R.drawable.ic_contact_picture);
        contact.close();
        return defaultPhoto;
    }
    
    0 讨论(0)
提交回复
热议问题