Android开发之——资源raw与assets

一 android中raw与assets区别

1.1 res/raw和assets的相同点

两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。

1.2 res/raw和assets的不同点

  • res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.raw.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。
  • res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹

二 实例

先看一张效果图

2.1 获取raw中资源

获取raw中图片

InputStream inputStream = getResources().openRawResource(R.raw.xiaoxin);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
imageView.setImageBitmap(bitmap);

获取raw中音乐

mp = MediaPlayer.create(this, R.raw.music);//创建mediaplayer对象

2.2 获取assets中资源

获取assets中网址

((WebView)findViewById(R.id.asset_webView)).loadUrl("file:///android_asset/a.html");

获取assets中图片

AssetManager assets = getAssets();
InputStream inputStream = assets.open("hzw.jpg");
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
((ImageView)findViewById(R.id.asset_img)).setImageBitmap(bitmap);

获取assets中音乐

AssetManager am = getAssets();
//AssetManager am = getResources().getAssets();
AssetFileDescriptor afd = null;
afd = am.openFd("qichuang.mp3");
FileDescriptor fd = afd.getFileDescriptor();
mp = new MediaPlayer();
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.setDataSource(fd, afd.getStartOffset(), afd.getLength());
//mp.setDataSource(fd);
mp.prepare();
mp.start();

三 参考:

demo