我有图像,仅由特定应用程序从 sdcard 读取,因此我想将其从图像库中隐藏。我已将 .nomedia 文件放入其中,但此文件被忽略,图像仍显示在图库中。我把它和“。”放在一起。在一开始的时候。还是行不通。有任何想法吗?
9 回答
我猜您使用的是 Android 4.0,在.nomedia
此之前运行正常。该问题的 AOSP错误报告解释说:
MediaScanner
在 Android 4.0 上,遇到文件时不会忘记已编制索引的.nomedia
文件,但如果它在第一次通过时就存在,它会尊重它。所以解决方法是简单地重命名目录。当然,如果您愿意,您可以在下次扫描后改回名称。
更新:我想完整的解决方案是在重命名目录后实际强制进行媒体扫描。我还没有尝试过,但是这样的事情应该可以解决问题:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" +
Environment.getExternalStorageDirectory())));
嗯......我承认我只是在猜测,但由于它在评论中得到了+1,我会试一试作为答案。由于这是您自己的应用程序,因此请将图像文件的扩展名更改为完全独特的“.myimagefile”,并查看它是否对 Android 隐藏。同时,您知道要将哪些文件加载到您自己的应用程序中,以及如何保存它们。
.nomedia 错误是正确的,您可以将其添加到预先存在的图像文件夹中。
您可以在创建 .nomedia 文件后通过重命名文件夹来强制图库重新索引,运行图库(“隐藏文件夹现在应该丢失了),然后将文件夹重命名为您想要的。它应该保持隐藏状态。
我只是再次这样做以确保它可以在我的手机上运行。安卓 4.0.4。
这是我自己发现的东西:
但是,对该方法稍作改动:
- 下载并安装SDRescan应用程序
- 图库应用程序的清除数据
- 清除媒体存储应用程序的数据
- 打开从第 1 步下载的 SDRescan 应用程序
应重新扫描 SDCard,此时应忽略所有包含 .nomedia 文件的目录。
在我的存储卡中,我有成千上万的照片,这些照片让媒体扫描仪不堪重负。然后在我存储卡的根文件夹中,从“RootFolder”重命名为“.RootFolder”
成为隐藏目录,不再使用 .nomedia
尝试这个。
图库没有经常更新,一些缩略图仍然在视图中。为此,您需要通过以下代码重新启动手机或以编程方式更新图库。
/**
* 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())));
}
该.nomedia
文件是预防性的,而不是治疗性的(在 Android 4.0 中),它是一个错误。如果您有一个.nomedia
文件并且其中已经有图像,Gallery 仍会搜索图像。
您需要先创建.nomedia
文件,然后再将图像放入其中。
编辑:不扫描所有以点开头的文件夹(因为隐藏)。
在我的三星 Galaxy Note 2 上使用 Media Storage 4.1.1,上面给出的任何技巧都不能完全发挥作用,从这个意义上说:仍然扫描包含 .nomedia 文件的目录,这会消耗大量电池(尽管结果在图库),以及名称以“。”开头的目录 仍在扫描:-(
我求助于使用“Media Scanner Root”应用程序,它允许完全禁用糟糕的媒体扫描仪。这显然是通过类似的东西实现的
下午禁用 com.android.providers.media/com.android.providers.media.MediaScannerReceiver
顺便说一句,禁用/冻结媒体存储应用程序本身会产生不好的影响,即铃声和通知的选择和绑定不再起作用(多么美妙的设计),但是当仅禁用其扫描仪组件时,仍然可以使用,例如,用于选择音调的 ES 文件资源管理器。
您可以考虑使用 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 库。
我自己还没有亲自使用过这个设施,所以我只是根据引用的参考资料来描述这个。