简体   繁体   中英

how to get photo_uri from photo_id

I go through the addressbook and try to get all contacts' photos which are not null.

I'm using android API8, so i cannot query for image_uri.

given photo_id (API 5), how can i get the photo bitmap?

here is my query:

public final static String[] PROJECTION2 = new String[] {
        ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID,
        ContactsContract.CommonDataKinds.Phone.NUMBER,
        ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
        ContactsContract.CommonDataKinds.Phone.PHOTO_ID
};

 public static void fillAddressBookData() {
    String sHash = null;
    String where = ContactsContract.Contacts.IN_VISIBLE_GROUP + "= ? ";
    String[] selectionArgs = new String[] {"1"};
    Cursor cursor =
        AppService
            .getAppContext()
            .getContentResolver()
            .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, PROJECTION2, where,
                selectionArgs, null);

...

try this:

private void GetImageByPhoneNumber(String number)
    {
        Uri uri1 = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,
                Uri.encode(number));
        Cursor test = getContentResolver().query(uri1,
                new String[] { "photo_uri" }, null, null,
                null);

        if (test.getCount() > 0) {
            test.moveToFirst();

            Uri photoUri = Uri.parse(test.getString(test
                    .getColumnIndexOrThrow("photo_uri"))));

            Bitmap image = getPhoto(context , photoUri);


        }

        test.close();
    }

and getPhoto:

public static Bitmap getPhoto(Context context , Uri uri){

        Bitmap bm = null;
        try {
            bm = BitmapFactory.decodeStream(context.getContentResolver()
                    .openInputStream(uri));


        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        if (bm == null) {
            bm = BitmapFactory.decodeResource(context.getResources(),
                    R.drawable.default_user_avatar);
        }
        return bm;
    }

Try the next code snippet, it should do the trick

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);
        }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM