android assets资源读取

开发编程  |  电脑网络

请问android的assets文件夹下的资源,都只能通过流的方式读取出来吗?能不能直接通过路径的方式或者其他什么方式操作?我工程里面要用到一个资源文件夹,里面还有嵌套的文件夹,包含有图片、音频等文件,我想把整个资源文件夹打包到安装程序中,并且需要访问其中的资源。不知是否有方法解决?谢谢大家
分享:
2017-08-11

2017-08-11最佳答案

确实只能使用流的方式,题主提出的问题其实也有解决方案:
首先将整个目录打包为一个zip文件,存放于assets目录下,然后:
方案一
读取的时候把它当zip文件读取,然后逐个读取其中的ZipEntry来使用。
优点是不需要额外的存储空间,缺点是读取稍显麻烦,但如果把逻辑都封装好了,也还能用的挺好
方案二
写到SD卡或是本地内存中,以后就可以直接使用了
优点是更接近于日常使用,缺点是需要使用额外的存储空间

另外,Android中有个很恶心的潜规则,就是当assets或是raw目录下单个压缩文件大小超过1024K之后,编译期appt会去强行处理此文件,使得我们运行期读取的时候会收到一个

This file can not be opened as a file descriptor; it is probably compressed

要解决这个问题可以将文件扩展名改为mp3或是wma这类的就OK了,具体细节可以参考:
http://ponystyle.com/blog/2010/03/26/dealing-with-asset-compression-in-android-apps/

最后,为什么要把音频和图片文件放到assets而不是直接扔res中呢?

其它1条答案

据我目前的了解。只能通过流的方式读取。我也是新手,共同学习

2017-08-11