我正在创建一个应用程序,将一些图像从Internet下载到一个定义为的特定文件夹中:
final String pathToPutFiles = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
+ File.separator + DOWNLOAD_FOLDER_NAME;
我希望制作图库和任何展示媒体的应用,以获得这些图片的通知,并能够展示它们。
可悲的是,我在Nexus 4上遇到了问题,它有Kitkat版本(确切地说是4.4.2)。有时候它会起作用,有时却不起作用。
有很多关于这个问题的帖子,我尝试过很多帖子,没有人使用简单的文件夹路径:
这就是我所做的(同样,它适用于具有Android 4.3的Galaxy S3,但有时不适用于具有Android 4.4.2的Nexus 4):
protected void notifyMediaScannerOfNewImageFiles(final String folderPathToScan) {
final ArrayList<String> newFilesToScan = new ArrayList<String>();
preparePaths(folderPathToScan, newFilesToScan, true);
final String[] newFilesToScanArr = newFilesToScan.toArray(new String[newFilesToScan.size()]);
MediaScannerConnection.scanFile(getApplicationContext(), newFilesToScanArr, null, null);
}
public static void preparePathsForMediaScanning(final String folderPathToScan, final Collection<String> pathsToFill,
final boolean recursive) {
if (TextUtils.isEmpty(folderPathToScan))
return;
final File folderToScan = new File(folderPathToScan);
if (!folderToScan.exists())
return;
pathsToFill.add(folderPathToScan);
if (!folderToScan.isDirectory())
return;
final File[] childrenFiles = folderToScan.listFiles();
if (childrenFiles == null || childrenFiles.length == 0)
return;
for (final File childFile : childrenFiles) {
if (childFile.exists()) {
final String childFilePath = childFile.getAbsolutePath();
pathsToFill.add(childFilePath);
if (recursive && childFile.isDirectory())
preparePathsForMediaScanning(childFilePath, pathsToFill, true);
}
}
}
我应该如何通知要扫描的整个文件夹?
为什么这种方法有时只适用于Kitkat?它只是Nexus设备还是其他设备?
应该使用什么来支持所有设备和Android版本?
答案 0 :(得分:2)
到目前为止,我已经在很长一段时间内解决了这个问题。正如在this SO anwser上发布的那样,它似乎是KitKat上发生的错误。
Android团队正在外部和内部跟踪issue。
与此同时,这是我发现的:https://stackoverflow.com/a/23078323/1367571