Я использую этот код, чтобы скопировать изображение с помощью documentFile.createFile()
ContentResolver не содержит только что созданный образ в немедленном запросе после создания файла
private void newcopyFile(File fileInput, String outputParentPath,
String mimeType, String newFileName) {
DocumentFile documentFileGoal = DocumentFile.fromTreeUri(this, treeUri);
String[] parts = outputParentPath.split("\\/");
for (int i = 3; i < parts.length; i++) {
if (documentFileGoal != null) {
documentFileGoal = documentFileGoal.findFile(parts[i]);
}
}
if (documentFileGoal == null) {
Toast.makeText(MainActivity.this, "Directory not found", Toast.LENGTH_SHORT).show();
return;
}
DocumentFile documentFileNewFile = documentFileGoal.createFile(mimeType, newFileName);
InputStream inputStream = null;
OutputStream outputStream = null;
try {
outputStream = getContentResolver().openOutputStream(documentFileNewFile.getUri());
inputStream = new FileInputStream(fileInput);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
if (outputStream != null) {
byte[] buffer = new byte[1024];
int read;
if (inputStream != null) {
while ((read = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, read);
}
}
if (inputStream != null) {
inputStream.close();
}
inputStream = null;
outputStream.flush();
outputStream.close();
outputStream = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
И это, как я запрашиваю ContentResolver
после создания образа, чтобы немедленно обновите мою галерею изображений с результатом запроса, который должен содержать информацию о вновь созданном изображении.
cursorPhotos = MainActivity.this.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projectionsImages,
null,
null,
MediaStore.Images.Media.DATE_TAKEN + " DESC"
);
Но немедленный запрос не смог найти только что созданное изображение. И если я запустил запрос снова через мгновение, в результате получится новое созданное изображение.
Кажется, что информация для вновь созданного изображения занимает время для ContentResolver
(если для этого отвечает ContentResolver), поскольку он будет работать в фоновом режиме, когда я запускаю немедленный запрос.
Есть ли способ или слушатель знать, когда только что созданное изображение зарегистрировано ContentResolver
?
Вы копируете изображения внутри задачи Async или основного потока пользовательского интерфейса? – Rahulrr2602
@ Rahulrr2602 Да, см. Ответ. – Eftekhari
Спасибо большое. Если я цикл цикл newcopyFile много раз, то иногда documentFileGoal имеет значение null. – Rahulrr2602