A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李健_8 中级黑马   /  2013-12-18 15:52  /  2063 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

asset资源目录的具体的用法,另外他和res目录的区别,希望哪位高手不吝赐教

2 个回复

倒序浏览
在应用的开发中,当我们创建一个新的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下不允许存在目录结构。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 任亚俊 于 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进行管理。
程序代码:
  1. public class RawResTest extends Activity
  2. {
  3.         MediaPlayer mediaPlayer1 = null;
  4.         MediaPlayer mediaPlayer2 = null;

  5.         @Override
  6.         public void onCreate(Bundle savedInstanceState)
  7.         {
  8.                 super.onCreate(savedInstanceState);
  9.                 setContentView(R.layout.main);
  10.                 // 直接根据声音文件的ID来创建MediaPlayer。
  11.                 mediaPlayer1 = MediaPlayer.create(this, R.raw.bomb);
  12.                 // 获取该应用的AssetManager
  13.                 AssetManager am = getAssets();
  14.                 try
  15.                 {
  16.                         // 获取指定文件对应的AssetFileDescriptor。
  17.                         AssetFileDescriptor afd = am.openFd("shot.mp3");
  18.                         mediaPlayer2 = new MediaPlayer();
  19.                         // 使用MediaPlayer加载指定的声音文件。
  20.                         mediaPlayer2.setDataSource(afd.getFileDescriptor());
  21.                         mediaPlayer2.prepare();
  22.                 }
  23.                 catch (IOException e)
  24.                 {
  25.                         e.printStackTrace();
  26.                 }
  27.                 // 获取第一个按钮,并为它绑定事件监听器
  28.                 Button playRaw = (Button) findViewById(R.id.playRaw);
  29.                 playRaw.setOnClickListener(new OnClickListener()
  30.                 {
  31.                         @Override
  32.                         public void onClick(View arg0)
  33.                         {
  34.                                 // 播放声音
  35.                                 mediaPlayer1.start();
  36.                         }
  37.                 });
  38.                 // 获取第二个按钮,并为它绑定事件监听器
  39.                 Button playAsset = (Button) findViewById(R.id.playAsset);
  40.                 playAsset.setOnClickListener(new OnClickListener()
  41.                 {
  42.                         @Override
  43.                         public void onClick(View arg0)
  44.                         {
  45.                                 // 播放声音
  46.                                 mediaPlayer2.start();
  47.                         }
  48.                 });
  49.         }
  50. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马