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

标签 android local-storage android-mediascanner

我的 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/

相关文章:

android - MediaScannerConnection.scanFile() 返回空 uri

android - EditText.setSelection(end) 没有效果?

java - 了解 Dagger2 子组件

javascript - 为什么当我点击登录按钮时我的程序就会卡住

android - 如何在删除照片后刷新 Android 的 MediaStore

android - 为什么我无法从 MediaStore 获取视频时长?

android - 谷歌地图 - 制作类似抓取应用程序的动画来显示路径方向

java - onNewIntent 没有被调用

javascript - 将模型保存在本地存储中

android - 在 Nexus 7 android 的 android webview 中播放内部存储中的 .SWF 文件