Телефон.PHOTO_URI к реальному пути

#android

#Android

Вопрос:

Я использую следующий код для получения телефонного контакта

 Cursor phones = Objects.requireNonNull(getActivity()).getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null,
                    ContactsContract.Contacts._ID   " = ? ", new String[]{id}, ContactsContract.Contacts.DISPLAY_NAME_PRIMARY   " ASC");
if (phones != null amp;amp; phones.getCount() > 0) {
    while (phones.moveToNext()) {
        String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
        String photoUri = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_URI));
    }
}
  

Здесь я получаю content://com.android.contacts/display_photo/17 как photoUri, Но мне нужен реальный путь, я попробовал следующий способ.

 public static String getPath(Uri contentUri, Context context) {
    String resu<
    Cursor cursor = context.getContentResolver().query(contentUri, null, null, null, null);
    if (cursor == null) { // Source is Dropbox or other similar local file path
        result = contentUri.getPath();
    } else {
        cursor.moveToFirst();
        int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
        result = cursor.getString(idx);
        cursor.close();
    }
    return resu<
}
  

Но это выдает IllegalArgumentException at android.database.DatabaseUtils.readExceptionFromParcel

Комментарии:

1. вы должны использовать свой Uri (в вашем случае content://com.android.contacts/display_photo/17 ), а не какой-либо «путь к файлу»

2. Я хочу получить путь к изображению профиля, потому что мне нужно поделиться им.

3. Попробуйте этот синтаксис : cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);

4. Я получил исключение от Cursor cursor = context.getContentResolver().query(contentUri, null, null, null, null); самого себя.

5. поэтому поделитесь своим Uri , а не каким-либо «путем к файлу»