Android资源系统(resources system )可用于打包APP应用程序所需的图片、XML文件和其他非Java资源。 在这里,您将学习如何打包另一个名为assets的资源。
资源资源可以保存声音文件。 例如,可以将xxx.wav文件保存在res/raw目录中,然后使用R.raw.xxx检索该文件。 但是,《Android编程权威指南》的事例BeatBox项目包括20多个不同的声音文件处理,在Android资源系统中一个个处理效率不高。 此时,assets方便。 assets可以被视为与APP应用程序打包的小型文件系统,支持任意级别的文件目录结构。 为此,让我们学习如何读取需要像游戏一样加载大量图像和文件的资产资源。 这里的Demo在书里没有使用同样的东西,为了学习assets,自己写了Demo。
首先导入ASsets (创建ASsets目录,然后使用as创建新项目。 因为似乎没有自动生成assets文件夹,所以邮件是单击app模块,New-Folder-Assets Folder ) )。
Demo截图
从下图中跳出来finish
Demo截图
项目中出现了资产
Demo截图
右键单击assets目录。 您可以直接将文件放在assets目录中,也可以创建另一个文件夹进行批量管理。 在此创建一个example文件夹,并包含一些txt文件
Demo屏幕快照publicclassassetdemoactivityextendsappcompatactivity {
私密性统计数据=' assetdemoactivity ';
privatestaticfinalstringexample _ folder=' example ';
私有资产管理器m资产;
@Override
protectedvoidoncreate (边界维护实例state )。
super.oncreate (savedinstancestate;
setcontentview (r.layout.activity _ asset _ demo );
mAssets=this.getAssets (;
try {
string [ ] examples=m assets.list (example _ folder );
log.I(tag,' ALL:' examples.length );
for(stringexample:examples ) {
log.I(tag,' Name:' example );
}
}catch(ioexceptione ) {
e .打印堆栈跟踪(;
}
}
}
打印结果:
Demo截图
assets目录中的所有文件都将与APP应用程序打包在一起。 访问assets需要可以从上下文中获取的AssetManager类。 通常,在访问assets时,不需要在意使用哪个Context对象。 在实际开发中,所有上下文的资产管理器管理的是同一资产资源。 assetsmanager.list(string )方法列出指定目录中的所有文件名。
当然,要获得资产资源的内容,必须使用文件读取技术。 首先需要得到资源文件的路径。 上述Demo获得路径的方法: stringassetpath=example _ folder '/' example;
inputstreamassetdata=m assets.open (asset path;
获得标准的InputStrem数据流,然后可能需要如何使用,以及根据API的不同,可能需要文件描述符。 调用assetmanager.openfd(string )方法就可以了。
加深理解:什么是无资产
AssetManager类还有一种称为opennonassetfd(…)的方法。 Android有两个资源系统:资产和资源。 resources资源系统被设计为具有良好的搜索类机制,但不能处理像图形和声音文件这样的大文件。 这些资源实际上存储在资产系统中。 在后台,Android使用openNonAsset方法打开这些资源。
来自: http://www.Jian Shu.com/p/27032 bba4c 14