原始资源就是Android没有为之提供专门支持的资源文件,可以放在如下两个位置
/res/raw Android SDK会在R清单类中为该目录下的资源生成一个索引项
/res/assets 需要通过AssetManager来管理该目录下的原始资源
下面写个Demo,往两个目录下各放一个mp3文件,一个叫one,一个叫two(都是黄小琥的音乐,可惜文件名不能是中文)
主界面main.xml代码如下
package WangLi.Resouce.RawResTest; import java.io.IOException; import android.app.Activity; import android.content.res.AssetFileDescriptor; import android.content.res.AssetManager; import android.media.MediaPlayer; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class RawResTest extends Activity { /** Called when the activity is first created. */ 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.two); //获取该应用的AssetManager AssetManager am = getAssets(); try { //获取指定文件对应的AssetFileDescriptor AssetFileDescriptor afd = am.openFd("one.mp3"); mediaPlayer2 = new MediaPlayer(); //使用MediaPlayer加载指定的声音文件 mediaPlayer2.setDataSource(afd.getFileDescriptor()); mediaPlayer2.prepare(); } catch(IOException e) { e.printStackTrace(); } //获取第一个按钮,并为它绑定事件监听器 Button playRaw = (Button)findViewById(R.id.button1); playRaw.setOnClickListener(new OnClickListener(){ public void onClick(View arg0) { //播放声音 mediaPlayer1.start(); } }); //获取第二个按钮,并为它绑定事件监听器 Button playAsset = (Button)findViewById(R.id.button2); playAsset.setOnClickListener(new OnClickListener(){ public void onClick(View arg0) { mediaPlayer2.start(); } }); } }
界面如下图,两个按钮,一个访问Asset下的文件,一个访问raw下的文件