如何以编程方式切换 .nomedia 文件

how to toggle .nomedia file programmatically

我正在创建一个应用程序来显示和隐藏位于 /viber/media/ 的 Viber App 的 "Viber Images" 文件夹。我知道我应该在该文件夹中删除并创建 .nomedia 文件,然后强制媒体扫描仪扫描它。

当我发送广播或静态使用 MediaScannerConnection 重新扫描该文件夹时,画廊需要四分之一以上的时间来更新该文件夹。

我试过了:

    String dir = Environment.getExternalStorageDirectory().getAbsolutePath()+"/viber/media/Viber Images/";
    File f = new File(dir);
    Uri uri = Uri.fromFile(f);
    Intent in = new Intent(Intent.ACTION_MEDIA_MOUNTED,uri);
    sendBroadcast(in);

但它没有更新媒体扫描仪,因为画廊中正在显示文件夹。

我也试过了:

    MediaScannerConnection.scanFile(MainActivity.this, new String[{"/storage/sdcard0/viber/media/Viber Images/"}, null, new MediaScannerConnection.OnScanCompletedListener() {

        public void onScanCompleted(String path, Uri uri) {
            Log.d("file",path+" scanned");
            Log.d("url","uri = "+uri);

        }

    });

并且 logcat 显示:

03-07 15:42:10.180: D/MediaScannerConnection(15267): Connected to MediaScanner
03-07 15:42:10.180: D/MediaScannerConnection(15267): Scanning file 7klwibgf7kdcbid(7mrafi7vfdrb7
03-07 15:42:10.670: D/file(15267): /storage/sdcard0/viber/media/Viber Images/ scanned
03-07 15:42:10.670: D/url(15267): uri = content://media/external/file/130512
03-07 15:42:10.670: D/MediaScannerConnection(15267): Disconnecting from MediaScanner

它似乎正在更新媒体扫描仪数据库,但无法影响图库应用更新其内容。 Playstore 中有一个名为 nomedia 的免费应用程序,它完全符合我在 phone 中的要求,但我的代码无法正常工作。

是否有任何方法或内置 class 可以做到这一点?或者有什么方法可以通过编程方式做到这一点?

抱歉我的英语不好。

感谢任何回答。

首先重命名文件夹。然后从媒体数据库中删除文件夹数据。然后重命名该文件夹。强制扫描仪扫描它...