O ContentResolver não contém apenas a imagem criada em uma consulta imediata após a criação do arquivo
Estou usando esse código para copiar uma imagem usandodocumentFile.createFile()
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();
}
}
E é assim que eu consultoContentResolver
depois de criar a imagem, para atualizar imediatamente minha galeria de imagens com o resultado da consulta, que deve conter informações da imagem recém-criada.
cursorPhotos = MainActivity.this.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projectionsImages,
null,
null,
MediaStore.Images.Media.DATE_TAKEN + " DESC"
);
Mas a consulta imediata não conseguiu encontrar a imagem recém-criada. E se eu executar a consulta novamente depois de um momento, a imagem recém-criada estará presente no resultado.
Parece que fornecer informações para a imagem recém-criada leva tempo paraContentResolver
(se o ContentResolver for responsável por isso), pois ele seria executado em segundo plano enquanto eu executava a consulta imediata.
Existe algum método ou ouvinte para saber quando a imagem recém-criada é registrada peloContentResolver
?