22

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

4

9 回答 9

17

我猜您使用的是 Android 4.0,在.nomedia此之前运行正常。该问题的 AOSP错误报告解释说:

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

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

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" +
    Environment.getExternalStorageDirectory())));
于 2012-06-07T12:33:22.783 回答
6

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

于 2012-06-01T06:56:26.987 回答
5

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

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

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

于 2012-11-02T18:16:38.430 回答
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 文件的目录。

于 2012-07-17T19:16:04.887 回答
2

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

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

尝试这个。

于 2012-12-10T03:29:25.810 回答
1

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

    /**
 * 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())));
}
于 2014-06-17T06:08:00.160 回答
1

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

您需要先创建.nomedia文件,然后再将图像放入其中。

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

于 2012-06-07T12:34:49.503 回答
1

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

下午禁用 com.android.providers.media/com.android.providers.media.MediaScannerReceiver

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

于 2013-12-27T09:43:07.803 回答
0

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

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

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

此外,如果您的应用程序从 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 库。

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

于 2012-06-07T11:36:56.410 回答