播放raw下的音乐文件

2023-11-01

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

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

播放raw下的音乐文件 的相关文章

随机推荐

  • 循环队列来了解一下!!

    笔者在之前的一篇文章 详细的介绍了 队列之单向链表与双向链表的模拟实现 https blog csdn net weixin 64308540 article details 128742090 spm 1001 2014 3001 550
  • Qtcreator常用快捷键

    qtcreator常用快捷键 1 代码补全 2 切换已打开的文件 3 快速添加方法实体 cpp 声明 4 修改变量名 并应用到所有使用该变量的地方 5 快速打开输出窗口 6 快速切换模式 7 书签功能 8 分栏显示 9 快速重写父类方法 1
  • python学习笔记---正则表达式【廖雪峰】

    正则表达式 正则表达式是一种用来匹配字符串的强有力的武器 它的设计思想是用一种描述性的语言来给字符串定义一个规则 凡是符合规则的字符串 我们就认为它 匹配 了 否则 该字符串就是不合法的 我们判断一个字符串是否是合法的Email的方法是 创
  • Linux-0.12内核打开文件过程--sys_open源码分析

    上图展示了进程打开文件使用的内核数据结构 所以要打开文件 就要构造上图中的关系 int sys open const char filename int flag int mode struct m inode inode struct f
  • js逆向教程1:某某威客登录

    假设不会js语法来进行js破解 本文感谢挖掘机小王子提供的帮助 挖掘机小王子的github https github com EnjoyScraping 网站的登录接口 我们可以准备一组常用的账号密码 并记下对应的MD5 base64等密文
  • 如何计算无线天线长度

    天线长度为波长的1 4 波长 波速 频率 波速 光速 3 100000000 eg 频率为476 3 则天线长度 300 476 3 4 0 1574 m
  • 洛谷 P2249 【深基13.例1】查找

    题目链接 https www luogu com cn problem P2249 include
  • Nginx极简使用

    编译源码安装Nginx 确认系统版本 确认网络 确认yum可用 确认防火墙 确认SELinux 并关闭 安装依赖库和运行环境 下载安装Nginx Nginx源码编译 查看目录结构 生成编译文件makefile 编译 安装 展示nginx的目
  • 【HTSl】A系统开发总结~致敬这热烈的夏季

    2019的六七八月 我陪伴着A系统一起走过这个炎热的夏季 从单一的功能 完成了华丽的蜕变 迎来了我们的成长 经过历时将近两个月的紧张开发 终于迎来了A系统上线 疲惫的身体得到的暂时的缓解 会想这一个月的开发 感觉收获很多 抱怨也很多 在这个
  • SpringBoot2.7.2 版本配置swagger3的方法及教程

    原因 对SpringBoot2 7 2版本 swagger2 x版本不再适用 所以就选择了swagger3版本 但是相较于swagger2版本 swagger3版本更加麻烦 具体教程如下 方法 第一步 引入依赖
  • 【计算机毕业设计】java ssm在线学习系统 在线学习平台

    毕设帮助 源码交流 技术解答 见文末 一 前言 以前 我们的在线学习主要是通过面对面的讲授 这样 有很多优势 教师可以与学生直接交流 但是也有许多不尽人意的地方 课堂在线学习很大程度上受到时间和空间的限制 浪费了在线学习资源同时对于学生的进
  • 【算法题目】Leetcode算法题思路:两数相加

    在LeetCode上刷了一题比较基础的算法题 一开始也能解出来 不过在解题过程中用了比较多的if判断 看起来代码比较差 经过思考和改进把原来的算法优化了 题目 给出两个 非空 的链表用来表示两个非负的整数 其中 它们各自的位数是按照 逆序
  • 数据结构(C#)-- 贪心算法解决背包问题

    using System using System Collections Generic using System Linq using System Text using System Data using System Collect
  • 计算机的基本组成及工作原理

    计算机的基本组成及工作原理 1 3 1 计算机系统的组成 计算机系统是由硬件系统和软件系统两大部分组成 这一节将分别介绍计算机硬件系统和软件系统 计算机硬件是构成计算机系统各功能部件的集合 是由电子 机械和光电元件组成的各种计算机部件和设备
  • pytorch: Pool 和 AdaptivePool 的区别和使用方法

    在 pytorch 中 池化层 Pooling 有两种操作方式 一种是手动设计 另一种是自适应池化 一 手动设计 池化层操作 一般有最大值 max 池化和均值 avg 池化 而根据尺寸又有一维 二维 三维 所以 手动设计的池化层有6种函数
  • GitHub加速教程

    转载 GitHub 加速教程 GitHub Hosts 仓库提供最新的GitHub hosts地址 你可以自行配置hosts 但是最佳实践是使用 SwitchHosts 管理你的 hosts 可以阅读文章 SwitchHosts 还能这样管
  • 在Java中尽量使用包装类Integer而不使用int

    1 在MySQL中没有给字段赋值默认为null 当你从数据库中查出来也是null 如果该字段在对应的Java代码中是int类型 null不能对应int类型 因为int代表的是基本数据类型 只能是基本的数字 2 实体类的属性你可以给它赋值也可
  • 三分钟教你学Git(二十一) - 复制连续多个提交

    有时候我们有一个分支A 里边包含了提交A1 gt A2 gt A3 gt A4 gt A5等 然后我们又有一个分支B 里边包含了提交A1 gt A2 gt B1 gt B2 gt B3 现在我们想把分支A中的A3 A4 A5版本复制到分支B
  • vue3项目实战+element-plus

    记录自己搭建前端项目的学习过程和开发过程 希望一起学习进步 采用Vue3 element plus axios vue router sass 目前刚开始是用到了这些 随着开发慢慢更新 npm是比较慢的 所以我用的是pnpm 安装指令 np
  • 播放raw下的音乐文件

    在开发的过程中 我们需要一些不需要用户改变的音乐或图像文件 这些文件存在安卓res raw文件夹中 下面就介绍如何播放res raw文件夹中的乐 1 在res目录下新建一个raw文件夹 2 界面上 xml文件中有一个按钮控件 当我们点击按钮