ОК, с помощью joakimk я нашел проблему.
Чтобы обновить отдельный фрагмент контента, вам нужно использовать Uri
, который указывает на этот отдельный фрагмент контента:
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DESCRIPTION, text);
Uri uri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imgId);
int res = getContentResolver().update(uri, values, null, null);
Эта форма update()
будет выбрасывать RecoverableSecurityException
. Вы можете поймать это и вызвать системное диалоговое окно , которое должно дать вам разрешение на успешное обновление этого содержимого.
В основном, логика c, которая решает, бросать ли RecoverableSecurityException
, зависит на самом Uri
, имеющем идентификатор содержимого, а не в предложении WHERE
. Побочным эффектом этого является то, что вы не можете изменять более одного фрагмента контента одновременно, хотя новые API Android R для этого могут помочь.
Я тестировал это на Android 10 и Android R DP1.