在开发的过程中,我们需要一些不需要用户改变的音乐或图像文件,这些文件存在安卓res/raw文件夹中,下面就介绍如何播放res/raw文件夹中的乐。
1、在res目录下新建一个raw文件夹
2、界面上:xml文件中有一个按钮控件,当我们点击按钮时,res/raw文件夹下的音乐会被播放
3、获取方式:res/raw下的资源我们通过R.raw.filename来获取,下面是详细代码:
package com.example.musicplay;
import java.io.File;
import java.io.InputStream;
import org.apache.http.util.EncodingUtils;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
String str;//判断正在播放的音乐
private Button playBut;
private EditText musicName;
private TextView rawText;
private MediaPlayer mediaPlayer,raw;
private String path;
private boolean pause;
//context 应用有关的信息,例如:包名
private int mediaPosition = 0;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
playBut = (Button)findViewById(R.id.play);
mediaPlayer = new MediaPlayer();
raw = MediaPlayer.create(getApplicationContext(),R.raw.tellmetellme);//播放raw资源音乐
musicName = (EditText)this.findViewById(R.id.musicName);
rawText = (TextView)findViewById(R.id.rawText);
str = musicName.getText().toString();
/**
* 监听电话状态,针对电话到来,暂停音乐
*/
//得到电话服务
TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
//设置监听
telephonyManager.listen(new MyTelListener(),PhoneStateListener.LISTEN_CALL_STATE);
}
//电话监听
private final class MyTelListener extends PhoneStateListener{
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
switch (state) {
case TelephonyManager.CALL_STATE_RINGING://来电
if(mediaPlayer.isPlaying()){
mediaPosition = mediaPlayer.getCurrentPosition();
mediaPlayer.pause();
}
break;
case TelephonyManager.CALL_STATE_IDLE://电话接听完毕
if(mediaPosition>0 && path!=null){
paly(mediaPosition);
mediaPosition = 0;
}
break;
default:
break;
}
}
}
public void mediaFun(View v){
switch (v.getId()) {
case R.id.play:
init();
break;
case R.id.next:
musicName.setText("zawysj.mp3");
init();
paly(mediaPosition);
if(path!=null)
playBut.setBackgroundResource(R.drawable.play);
break;
case R.id.top:
musicName.setText("qsw.mp3");
init();
paly(mediaPosition);
if(path!=null)
playBut.setBackgroundResource(R.drawable.play);
break;
case R.id.repeat:
if(mediaPlayer.isPlaying()){//判断是否正在播放
mediaPlayer.seekTo(0);//从头开始播放
}else{
if(path!=null){
playBut.setBackgroundResource(R.drawable.play);
paly(mediaPosition);
}
}
break;
case R.id.stop:
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
// playBut.setBackgroundResource(R.drawable.bofang);
playBut.setBackgroundResource(R.drawable.pause);
pause = false;
}else{
if(pause){
mediaPlayer.stop();
pause = false;
}
}
break;
case R.id.rawMusic:
if(raw.isPlaying()){
raw.stop();
}else{
raw.start();
}
break;
case R.id.rawTxt:
InputStream in = getResources().openRawResource(R.raw.text);
byte[] buffer = new byte[1024];
StringBuffer stringBuffer = new StringBuffer();
try {
while(in.read(buffer)!=-1){
String encodeText = EncodingUtils.getString(buffer,"GBK");//转码
stringBuffer.append(encodeText);
}
rawText.append(stringBuffer.toString());
} catch (Exception e) {
System.out.println(e.toString());
}
break;
default:
break;
}
}
private void init(){
String fileName = musicName.getText().toString();
// File filePath = new File(Environment.getExternalStorageDirectory(),fileName);
File filePath = new File("/mnt/sdcard/",fileName);
if(filePath.exists()){
path = filePath.getAbsolutePath();
Toast.makeText(getApplicationContext(), path, Toast.LENGTH_LONG).show();
if(mediaPlayer.isPlaying()){
mediaPlayer.pause();
playBut.setBackgroundResource(R.drawable.play);
}else{
paly(mediaPosition);
playBut.setBackgroundResource(R.drawable.pause);
}
}
else{
path = null;
Toast.makeText(getApplicationContext(),"文件未找到",Toast.LENGTH_SHORT).show();
}
}
private void paly(int mediaPosition){
mediaPlayer.reset();//把各项参数初始化
try {
mediaPlayer.setDataSource(path);
mediaPlayer.prepare();//开始缓冲
mediaPlayer.setOnPreparedListener(new PreparedListenner(mediaPosition));
} catch (Exception e) {
e.printStackTrace();
}
}
private final class PreparedListenner implements OnPreparedListener{
private int position;
public PreparedListenner(int position){
this.position = position;
}
public void onPrepared(MediaPlayer mp) {
mp.start();//开始播放
mediaPlayer.seekTo(position);
}
}
}
源码下载地址
http://download.csdn.net/detail/u010885095/8964017