繁体   English   中英

Android - .nomedia不适用于图像

[英]Android - .nomedia not working for images

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

我猜你正在使用Android 4.0,因为.nomedia之前正常运行。 针对该问题的AOSP 错误报告解释了:

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

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

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

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

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

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

我刚刚再次这样做,以确保它在我的手机上工作。 Android 4.0.4。

这是我发现自己的东西:

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

但是,对该方法稍作改动:

  1. 下载并安装SDRescan应用程序
  2. 清除Gallery应用的数据
  3. 清除Media Storage应用程序的数据
  4. 打开从步骤1下载的SDRescan应用程序

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

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

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

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

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

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

尝试这个。

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

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

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

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

    /**
 * 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())));
}

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

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

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

此外, 如果您的应用程序从SD卡中读取 (但不写入 )该卡的图像,并且该图像应仅供您自己的应用程序使用,并且可以在安装或更新应用程序时提供,则可能有意义的是利用新的Google Play工具将其作为应用安装时的一部分合并。

我猜你正在将你的图像存储到SD卡中,因为它们太大而不适合你的APK文件(考虑到它的50MB大小限制,由于缓冲问题,它甚至比某些设备的实际情况要小)。

如果是这样,那么您可能会认为Google Play(截至2012年3月5日)支持最多两个“扩展文件”(最多2个)的附件(到您的应用)。 APK仍然有50MB的最大值,但扩展文件将可用的总存储量提高到4 GB以上。 这些扩展文件由Google为您提供,并且保存在特定于您的应用的特定SD卡文件夹中,并且可以使用下载程序库提供的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库。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM