播放raw下的音乐文件

17 篇文章 1 订阅
10 篇文章 0 订阅

 在开发的过程中,我们需要一些不需要用户改变的音乐或图像文件,这些文件存在安卓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

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值