gpt4 book ai didi

android - 使用本地存储中的 mediascannerconnection 重新扫描旧文件。文件在 Windows 上未更新

转载 作者:行者123 更新时间:2023-11-30 00:06:37 38 4
gpt4 key购买 nike

我的 android 应用程序将一堆 csv 文件和 jpg 文件写入设备的内部存储器。我正在使用 MediaScannerConnection.scanFile() 使文件可以从我的 windows 系统访问,而无需重新启动 android 设备。

private void scanFiles() {
File targetDirectory = new File(Environment.getExternalStorageDirectory(), "DIR_OF_MY_APP");

if (targetDirectory.exists()) {
List<File> filesToScan = getFiles(targetDirectory);
List<String> filePathsToScan = new ArrayList<>();
for(File file : filesToScan) {
filePathsToScan.add(file.getPath());
}

MediaScannerConnection.scanFile(this, filePathsToScan.toArray(new String[0]), null, new MediaScannerConnection.OnScanCompletedListener() {
@Override
public void onScanCompleted(String path, Uri uri) {
Log.d("OK", "Path: " + path);
Log.d("OK", "Uri : " + uri);
}
});
}
}

在我的 Logcat 中,我可以看到每个文件都在被扫描。新的和旧的。

我的问题是当我的应用程序向现有的 csv 文件添加新行并且正在扫描该文件时,当从我的电脑打开 csv 文件时,新行不会出现在 csv 文件中。我该如何解决这个问题?


我已经尝试将所有文​​件从 filename 重命名为 tmp_filename,重新扫描所有文件并将它们从 tmp_filename 重命名为 >filename 并再次重新扫描它们。在此之后,我可以在我的 Windows 计算机上看到 oldfilename-filetmp_oldfilename-filetmp_oldfilename-file 无法打开([内存地址] 上出现未知错误)。 oldfilename-file 显示未更新的 csv 文件。


我还尝试使用 intent 来扫描文件,因为一些关于 so 的问题说它会更新它们:

for(File file : filesToScan) {
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE)
Uri contentUri = Uri.fromFile(file);
mediaScanIntent.setData(contentUri);
sendBroadcast(mediaScanIntent);
Log.d("OK", "File: " + file.getName() + " scanned...");
}

在这里我也可以看到正在扫描的文件,但它们没有在我的 Windows 计算机上显示更新。

最佳答案

好的,我想到的唯一解决方案是在执行之前将 usb-mode 设置为 load-only(这必须由用户手动完成) MediaScannerConnection.scanFile();。完成后,用户可以将 usb-mode 设置回 mtp,然后 csv 文件将显示新添加的行。

这是一个非常糟糕的解决方法,但仍然比重新启动设备要好。如果有人有更好的解决方案,请分享。

关于android - 使用本地存储中的 mediascannerconnection 重新扫描旧文件。文件在 Windows 上未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48862775/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com