Если ваше приложение выполняет потенциально трудоемкие операции, такие как
запись в медиафайлы, полезно иметь монопольный доступ к
файлу во время его обработки. На устройствах под управлением Android 10 или
более поздней версии ваше приложение может получить этот эксклюзивный доступ, установив значение
флага IS_PENDING равным 1. Только ваше приложение сможет просматривать файл, пока ваше
приложение не изменит значение IS_PENDING обратно на 0.
Похоже, что IS_PENDING полностью управляется моим приложением. Тем не менее, я столкнулся с ситуацией, когда похоже, что IS_PENDING автоматически устанавливается MediaStore, потому что я вынужден установить его на 0, чтобы все работало.
Ситуация такова: я создаю изображение в загрузках, используя что-то вроде этого:
Код: Выделить всё
values.put(MediaStore.Downloads.DISPLAY_NAME, "foo.png");
values.put(MediaStore.Downloads.MIME_TYPE, "image/png");
values.put(MediaStore.Downloads.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS);
target = MediaStore.Downloads.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY);
uri = resolver.insert(target, values);
pfd = resolver.openFileDescriptor(uri, "w");
...
pfd.close();
Код: Выделить всё
cursor = resolver.query(uri, new String[]{OpenableColumns.DISPLAY_NAME, OpenableColumns.SIZE}, null, null, null);
cursor.moveToFirst();
size = cursor.getLong(1)
К моему большому замешательству, я могу легко решить проблему, просто установив для IS_PENDING значение 0 в Uri, например:
Код: Выделить всё
ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.IS_PENDING, 0);
resolver.update(uri, values, null, null);
Вот почему я хотел бы попросить дать некоторое объяснение этому поведению. Может быть, MediaStore автоматически присваивает IS_PENDING значение 1, или почему я наблюдаю такое странное поведение?
Моя тестовая система — Android 16, целевой SDK — 35.
Подробнее здесь: https://stackoverflow.com/questions/798 ... fault-to-1
Мобильная версия