Android - .nomedia不适用于图像

时间:2012-05-22 07:01:54

标签: android image media

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

9 个答案:

答案 0 :(得分:17)

我猜你正在使用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())));

答案 1 :(得分:6)

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

答案 2 :(得分:5)

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

您可以在创建.nomedia文件后通过重命名文件夹,运行库(“隐藏文件夹现在应该丢失”)并将文件夹重命名为您想要的内容来强制库重新编制索引。它应该保留隐藏。

我刚刚再次这样做以确保它可以在我的手机上运行。 Android 4.0.4。

答案 3 :(得分:4)

这是我发现自己的事情:

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

然而,对该方法略有改动:

  1. 下载并安装SDRescan app
  2. 清除图库应用的数据
  3. 清除媒体存储应用的数据
  4. 打开从步骤1下载的SDRescan应用
  5. 应重新扫描SDCard,此时应忽略包含.nomedia文件的所有目录。

答案 4 :(得分:1)

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

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

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

答案 5 :(得分:1)

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

成为隐藏目录而不使用更多.nomedia

试试这个。

答案 6 :(得分:1)

在我的三星Galaxy Note 2上使用Media Storage 4.1.1,从这个意义上讲,上面给出的所有技巧都没有完全发挥作用:仍然扫描包含.nomedia文件的目录,这会耗尽电池(尽管结果是在库中忽略,以及名称以'。'开头的目录。仍在扫描:-(
我使用了“Media Scanner Root”应用程序,该应用程序允许完全禁用蹩脚的媒体扫描程序。这显然是通过类似

pm disable com.android.providers.media/com.android.providers.media.MediaScannerReceiver

的方式实现的 BTW,禁用/冻结媒体存储应用程序本身会产生不良影响,即铃声和通知的选择和绑定不再起作用(这是一个很棒的设计),但是当只禁用其扫描仪组件时,仍然可以使用例如,用于选择音调的ES文件资源管理器。

答案 7 :(得分: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())));
}

答案 8 :(得分: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个)的附件(到您的应用)。 APK仍然有50MB的最大值,但扩展文件将可用的总存储量提高到4 GB以上。这些扩展文件由Google为您提供,并且保存在特定于您的应用的特定SD卡文件夹中,并且可以使用下载程序库提供的API进行访问(需要API级别5或更高级别)。

Google宣布了这一变化:

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库。

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