Прежде всего вам необходимо знать, что делает MediaScannerConnection.scanFile
.Он обновит информацию о файле на текущем устройстве, поэтому другие приложения, такие как галерея, проводник и т. Д., Могут отображать правильную информацию о файле и его содержимое.
Из вашего кода при сохранении временного файла вытакже сканируют его, потому что ваше приложение изменило соответствующий файл, который создает файл, чтобы быть точным.Таким образом, файл будет доступен для других приложений сразу.Но, поскольку местоположение файла находится в каталоге кэша вашего приложения, оно не будет доступно для других приложений.Обычно вы должны перезагрузить устройство, чтобы обновить информацию о файле, если вы не звоните MediaScanner.scanFile
.Если вы создаете временный файл, я думаю, вам не нужно звонить MediaScanner.scanFile
, так как вы удалите его сразу.Затем, после удаления, вам также необходимо повторно отсканировать файл, чтобы другие приложения знали, что файл был удален.
Кроме того, несмотря на использование MediaScannerConnection.scanFile
напрямую, если вы поддерживаете версию для Android Intent.ACTION_MEDIA_MOUNTED.И я также рекомендую вам передавать данные напрямую, потому что из моего опыта MediaScannerConnection.scanFile
не удалось с одного из моих тестовых устройств.
Intent mediaScanIntent;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
mediaScanIntent.setData(Uri.fromFile(new File(imagePath)));
} else {
Uri fileUri = Uri.parse("file://" + imagePath);
mediaScanIntent = new Intent(Intent.ACTION_MEDIA_MOUNTED, fileUri);
}
context.sendBroadcast(mediaScanIntent);