【问题标题】:Android - .nomedia not working for imagesAndroid - .nomedia 不适用于图像
【发布时间】:2012-05-22 07:01:53
【问题描述】:

我有图像,这些图像只能由特定应用程序从 sdcard 读取,因此我想将其从图像库中隐藏。我已将 .nomedia 文件放入其中,但此文件被忽略,图像仍显示在图库中。我把它和“。”放在一起。在一开始的时候。还是行不通。有什么想法吗?

【问题讨论】:

  • 我不知道这是否真的有效(因为我不知道 Android 是查看数据还是仅查看文件扩展名)但是您是否尝试将文件扩展名更改为完全是你自己的?既然您知道文件是什么,您可以自己加载它们,但 Android 可能会忽略它们?
  • @Dr.Dredel +1,只需删除扩展程序就可以了。
  • 您能否发布您创建 .nomedia 文件的代码,以便我们验证它是否正确?否则,使用 Dr. Dredel 的建议应该会奏效。否则,我会说看看这个其他答案stackoverflow.com/questions/2733576/android-file-creation-fails 并确保您拥有正确的权限。
  • 你在什么设备上测试这个?我以前没有遇到过 .nomedia 文件的问题。您确定文件名称正确吗?你是如何添加这个文件的?

标签: android image media


【解决方案1】:

我猜您使用的是 Android 4.0,因为 .nomedia 在此之前运行正常。 AOSP bug report for the issue 解释说:

Android 4.0 上的MediaScanner 在遇到.nomedia 文件时无法忘记已编入索引的文件,但如果它在第一次通过时就存在,它会尊重它。所以解决方法是简单地重命名目录。当然,如果您愿意,可以在下次扫描后改回名称。

更新:我想完整的解决方案是在重命名目录后实际强制进行媒体扫描。我还没有尝试过,但是这样的事情应该可以解决问题:

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" +
    Environment.getExternalStorageDirectory())));

【讨论】:

  • 请注意,重启手机也会重新索引图像 [在 Andro 4.1.2 上测试]
  • @GrzegorzDev 重启后如何检查?它不适用于“.nomedia”
  • 解决了我的问题。
  • 请注意,“Intent.ACTION_MEDIA_MOUNTED”广播不适用于 Android 4.4+。
【解决方案2】:

嗯...我承认我只是在猜测,但由于它在评论中得到了 +1,我会试一试作为答案。由于这是您自己的应用程序,因此请将图像文件的扩展名更改为完全独特的“.myimagefile”,并查看它是否对 Android 隐藏。同时,您知道要将哪些文件加载​​到您自己的应用中,以及如何保存它们。

【讨论】:

  • MediaScanner 确实使用文件扩展名来确定文件类型,因此重命名每个文件都可以,但简单地重命名目录(在添加 .nomedia 之后)要简单得多。
  • 正如我所说,我只是按照 OP 所描述的问题来猜测可能的解决方案。听起来 .nomedia 不是一个完美的解决方案,按照另一个答案,但我可以看到文件重命名方案可能更麻烦。
【解决方案3】:

.nomedia 错误是正确的,您可以将其添加到预先存在的图像文件夹中。

您可以在创建 .nomedia 文件后通过重命名文件夹来强制图库重新索引,运行图库(“隐藏文件夹现在应该不见了),然后将文件夹重命名为您想要的。它应该保留隐藏。

我只是再次这样做以确保它在我的手机上工作。安卓 4.0.4。

【讨论】:

    【解决方案4】:

    这是我自己发现的:

    http://www.transformerforums.com/forum/asus-transformer-faq/17765-solved-nomedia-doesnt-work-under-honeycomb-ics.html

    不过,对该方法稍作改动:

    1. 下载并安装SDRescan应用程序
    2. 为图库应用清除数据
    3. 为媒体存储应用清除数据
    4. 打开从第 1 步下载的 SDRescan 应用

    应重新扫描 SDCard,此时应忽略所有包含 .nomedia 文件的目录。

    【讨论】:

    • 这对我有用。这很简单。就我而言,我无法重命名该文件夹,因为它是我不想在图库中显示的 Whatsapp 图片和 Whatsapp 视频其他 Whatsapp 媒体文件夹。重命名文件夹可能会使 whatsapp 应用程序也丢失数据。这就是为什么,这种方法是最好和最安全的方法。
    【解决方案5】:

    在我的存储卡中,我有数以千计的照片让媒体扫描仪不堪重负。然后在我存储卡的根文件夹中,从“RootFolder”重命名为“.RootFolder”

    成为隐藏目录,不再使用.nomedia

    试试这个。

    【讨论】:

      【解决方案6】:

      .nomedia 文件是预防性的,而不是治疗性的(在 Android 4.0 中),它是一个错误。 如果您有一个.nomedia 文件并且其中已经有图像,Gallery 仍会搜索图像。

      您需要创建.nomedia 文件将图像放入其中。

      编辑:不扫描所有以点开头的文件夹(因为隐藏)。

      【讨论】:

      • “预防性,而非治疗性”这仅适用于冰淇淋三明治——见我的回答。
      【解决方案7】:

      在我的三星 Galaxy Note 2 上使用 Media Storage 4.1.1,上面给出的所有技巧都不能完全发挥作用,在这个意义上:包含 .nomedia 文件的目录仍会被扫描,这会消耗大量电池(尽管结果是在图库中被忽略),以及名称以“。”开头的目录仍在扫描 :-(
      我求助于使用“Media Scanner Root”应用程序,它允许完全禁用糟糕的媒体扫描仪。这显然是通过

      之类的方法实现的
      pm 禁用 com.android.providers.media/com.android.providers.media.MediaScannerReceiver

      顺便说一句,禁用/冻结媒体存储应用程序本身的不良影响是铃声和通知的选择和绑定不再起作用(多么美妙的设计),但是当仅禁用其扫描仪组件时,仍然可以使用,例如用于选择音调的 ES 文件资源管理器。

      【讨论】:

        【解决方案8】:

        图库没有经常更新,一些缩略图仍在视图中。为此,您需要通过以下代码重新启动手机或以编程方式更新图库。

            /**
         * This method is must to reflect changes on gallery, if some file is
         * deleted or moved, <b> no updation is shown on gallery till phone is
         * rebooted </b> or <i>till this method UpdateGallery(Activity activity) is
         * called</i> UpdateGallery
         */
        public static void UpdateGallery(Activity activity) {
            activity.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri
                    .parse("file://" + Environment.getExternalStorageDirectory())));
        }
        

        【讨论】:

        • 重启手机有效,至少在 Android 7.1.2 (LineageOS) 上,非常感谢!
        【解决方案9】:

        您可以考虑使用 APK 扩展 Zip 库(需要 API 级别 5 或更高级别)来读取您将作为 Zip 存档的一部分安装到 SD 卡的文件。这个库的描述可以在这里找到:

        http://developer.android.com/guide/market/expansion-files.html#ZipLib

        据推测,存储在 SD 卡上的 ZIP 存档中的文件将不会被图库显示。

        此外,如果您的应用可以从 SD 卡中读取(但不写入)SD 卡,并且应该仅适用于您自己的应用程序,并且可以在您的应用程序安装或更新时交付,那么利用新的 Google Play 工具将它们合并为您的应用程序的部分可能是有意义的安装时。

        我猜您将图像存储到 SD 卡是因为它们太大而无法放入您的 APK 文件中(考虑到它的 50MB 大小限制,由于缓冲的原因,它甚至比某些设备的实际大小还要小问题)。

        如果是这样,那么您可能会认为,截至 2012 年 3 月 5 日,Google Play 支持最多两个“扩展文件”的附件(到您的应用程序),每个文件最多 2 GB。 APK 的最大容量仍为 50MB,但扩展文件将可用的总存储空间提高到 4 GB 以上。这些扩展文件由 Google 为您提供,它们保存在特定于您的应用的特定 SD 卡文件夹中,并且可以使用 Downloader Library 提供的 API 进行访问(需要 API 级别 5 或更高级别)。

        以下是谷歌关于这一变化的公告:

        http://android-developers.blogspot.in/2012/03/android-apps-break-50mb-barrier.html

        这里是设施的详细描述:

        http://developer.android.com/guide/market/expansion-files.html

        请注意,虽然此功能是新功能,但这些库已随 Android SDK 一起提供,可用于早期的 API 级别。例如,在我的安装中,我在这里找到了 API-8 版本:

        <Android SDK base folder>\extras\google\play_apk_expansion\
        

        同一文件夹在其 zip_file 子文件夹中包含上述 APK 扩展 Zip 库。

        我自己还没有亲自使用过这个设施,所以我只是根据引用的参考资料来描述这个。

        【讨论】:

          猜你喜欢
          • 2017-06-08
          • 1970-01-01
          • 2019-05-16
          • 1970-01-01
          • 2023-04-03
          • 2015-12-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-20
          相关资源
          最近更新 更多