黑马程序员技术交流社区
标题:
asset资源目录的具体作用
[打印本页]
作者:
李健_8
时间:
2013-12-18 15:52
标题:
asset资源目录的具体作用
asset资源目录的具体的用法,另外他和res目录的区别,希望哪位高手不吝赐教
作者:
零敢
时间:
2013-12-18 16:00
在应用的开发中,当我们创建一个新的Android工程后,我们会发现工程中包含了一个目录assets,另外当我们察看一些示例工程的时候,有时会发现在该工程的资源目录下会有一个raw目录(res/raw)。那么assets和raw目录有什么用处呢?下面笔者将给与解释。
assets和res/raw工程目录下都可以放一些小于1M的文件(2.3版本以前要求,否则将不能读出数据。),这些文件将被打包到APK中应用使用。assets目录下的文件将不做任何处理被打包,而res/raw目录下的文件,有些文档说会编译为二进制,有些文档说不会。笔者认为这些不是很重要,一个原则那就是最好不要将过大的文件打包到APK中,如果你的资源很大,例如视频等等,应该单独存储在文件系统中。这两个目录的区别主要是assets目录下的文件不会被映射到R.java中,即系统不会自动为其生成一个资源ID. 另一方面,由于系统会为res目录下的所有资源生成相应的资源ID,所以raw中的文件也不例外。综上,我们可以通过ID去访问res/raw目录中的任何文件,而assets目录中的文件就需要借助AssetManager去访问了。最后二者还有一个区别,assets目录允许下面有多级子目录,而res/raw下不允许存在目录结构。
作者:
任亚俊
时间:
2013-12-18 22:38
本帖最后由 任亚俊 于 2013-12-18 22:39 编辑
asset目录存放Android的原始资源,原始资源就是类似声音及其他各种类型的文件,只要Android没有为止提供支持,这种资源就教做原始资源。assets目录下的资源可以通过AssetManager类来管理。
下面举个使用assets目录的例子。
程序功能:播放/raw和/assets目录下的声音文件。实现思路:先在应用的/res/raw/目录下放一个bomb.mp3文件,Android SDK会自动处理该目录下的资源,会在R清单类中为它生成一个索引项,R.raw.bomb,接下来我们再往、assets目录下放一个shot.mp3文件,需要通过AssetManager进行管理。
程序代码:
public class RawResTest extends Activity
{
MediaPlayer mediaPlayer1 = null;
MediaPlayer mediaPlayer2 = null;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 直接根据声音文件的ID来创建MediaPlayer。
mediaPlayer1 = MediaPlayer.create(this, R.raw.bomb);
// 获取该应用的AssetManager
AssetManager am = getAssets();
try
{
// 获取指定文件对应的AssetFileDescriptor。
AssetFileDescriptor afd = am.openFd("shot.mp3");
mediaPlayer2 = new MediaPlayer();
// 使用MediaPlayer加载指定的声音文件。
mediaPlayer2.setDataSource(afd.getFileDescriptor());
mediaPlayer2.prepare();
}
catch (IOException e)
{
e.printStackTrace();
}
// 获取第一个按钮,并为它绑定事件监听器
Button playRaw = (Button) findViewById(R.id.playRaw);
playRaw.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
// 播放声音
mediaPlayer1.start();
}
});
// 获取第二个按钮,并为它绑定事件监听器
Button playAsset = (Button) findViewById(R.id.playAsset);
playAsset.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
// 播放声音
mediaPlayer2.start();
}
});
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2