长时间的音乐因为体积比较大,放在手机内存中,对资源的占用太大。
MediaPlayer类可以用来播放音频、视频和流媒体,
MediaPlayer包含了Audio和Video的播放功能。
在Android的界面上,Music和Video两个应用程序都是调用MediaPlayer实现的。
MediaPlayer在底层是基于OpenCore(PacketVideo)的库实现的。
一.基础知识:
首先来看看MediaPlayer的生命周期:
下边是MediaPlayer提供的常用方法:
方法 说明
MediaPlayer 构造方法
create 创建一个要播放的多媒体
getCurrentPosition 得到当前播放位置
getDuration 得到文件的时间
getVideoHeight 得到视频的高度
getVideoWidth 得到视频的宽度
isLooping 是否循环播放
isPlaying 是否正在播放
pause 暂停
prepare 准备(同步)
prepareAsync 准备(异步)
release 释放MediaPlayer对象
reset 重置MediaPlayer对象
seekTo 指定播放的位置(以毫秒为单位的时间)
setAudioStreamType 设置流媒体的类型
setDataSource 设置多媒体数据来源
setDisplay 设置用SurfaceHolder来显示多媒体
setLooping 设置是否循环播放
setOnButteringUpdateListener 网络流媒体的缓冲监听
setOnErrorListener 设置错误信息监听
setOnVideoSizeChangedListener 视频尺寸监听
setScreenOnWhilePlaying 设置是否使用SurfaceHolder来保持屏幕显示
setVolume 设置音量
start 开始播放
stop 停止播放
这个图和这些函数名称,对于我们初学者来说, 没必要太在意, 了解一下基本的名词即可,等到项目中确实遇到交互性问题时,我们再回来仔细探讨。
我们只要明白下面几行代码即可(Android中通过MediaPlayer来播放音乐的步骤):
MediaPlayer mp = new MediaPlayer();//构建MediaPlayer对象
mp.setDataSource("/sdcard/test.mp3");//设置文件路径
mp.prepare();//准备
mp.start();//开始播放
上面四行代码实现了媒体文件的播放,但是如果还想再加入对音量的控制,就要涉及到
AudioMananger类。
AudioManager中常用的方法如下:
A. 获取声音管理器:
AudioManager audioManager = (AudioManager) this.getSystemService(AUDIO_SERVICE);
B、设置声音模式:
//声音模式
AudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
//静音模式
AudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
//震动模式
AudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
C、调整声音大小:
//减少声音音量
AudioManager.adjustVolume(AudioManager.ADJUST_LOWER, 0);
//调大声音音量
AudioManager.adjustVolume(AudioManager.ADJUST_RAISE, 0);
D、获取音量大小:
// 取得当前设备的当前音量
AudioManager.getStreamVolume(int streamType)
// 取得当前设备的最大音量
AudioManager.getStreamMaxVolume(int streamType)
E、其他:
getMode()获取音频模式
getRingerMode()获取铃声震动模式
setRingerMode(int ringerMode) 改变铃声模式
这里如果使用了和手机震动有关的模式,记得添加权限。android.permission.VIBRATE哦!
二.编程实现:
1. 界面编辑(
res\layout\main.xml):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:text="播放音乐"
android:id="@+id/ButtonPlay"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button> <!-- 播放音乐按钮 -->
<Button
android:text="暂停音乐"
android:id="@+id/ButtonPause"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button> <!-- 暂停音乐按钮 -->
<Button
android:text="停止音乐"
android:id="@+id/ButtonStop"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button> <!-- 停止音乐按钮 -->
<Button
android:text="增大音乐"
android:id="@+id/ButtonVAdd"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button> <!-- 增大音乐按钮 -->
<Button
android:text="降低音乐"
android:id="@+id/ButtonVReduce"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</Button> <!-- 降低音乐按钮 -->
</LinearLayout>
界面布局效果如下:
2. 代码编辑(\src\wyf\zcl\MyActivity.java):
package wyf.zcl;
import android.app.Activity; //引入相关包
import android.media.AudioManager; //引入相关包
import android.media.MediaPlayer; //引入相关包
import android.os.Bundle; //引入相关包
import android.view.View; //引入相关包
import android.widget.Button; //引入相关包
import android.widget.Toast;
public class MyActivity extends Activity {
/** Called when the activity is first created. */
private Button bPlay; //播放按钮
private Button bPause; //暂停按钮
private Button bStop; //停止按钮
private Button bAdd; //增大音量
private Button bReduce; //降低音量
private boolean pauseFlag=false; //暂停标记,true暂停态,false非暂停态
MediaPlayer mp; //MediaPlayer引用
AudioManager am; //AudioManager引用
@Override
public void onCreate(Bundle savedInstanceState) { //Activity创建时调用
super.onCreate(savedInstanceState);
setContentView(R.layout.main); //设置Activity的显示内容
bPlay=(Button)findViewById(R.id.ButtonPlay); //播放按钮的实例化
bPause=(Button)findViewById(R.id.ButtonPause); //暂停按钮的实例化
bStop=(Button)findViewById(R.id.ButtonStop); //停止按钮的实例化
bAdd=(Button)findViewById(R.id.ButtonVAdd); //增大音量按钮的实例化
bReduce =(Button)findViewById(R.id.ButtonVReduce);//降低音量按钮的实例化
mp=new MediaPlayer();
am=(AudioManager) this.getSystemService(this.AUDIO_SERVICE);
bPlay.setOnClickListener(new View.OnClickListener() {//播放按钮的监听器
@Override
public void onClick(View v) {
try{
mp.setDataSource("/sdcard/music/sound_of_dream_DJ.mp3"); //加载音频,进入Initialized状态。
}catch(Exception e){e.printStackTrace();}
try{
mp.prepare(); //进入prepared状态。
}catch(Exception e){e.printStackTrace();}
mp.start(); //播放音乐
Toast.makeText(MyActivity.this, "播放音乐", Toast.LENGTH_SHORT).show();
}});
bPause.setOnClickListener(new View.OnClickListener() { //暂停按钮添加监听器
@Override
public void onClick(View v) {
if(mp.isPlaying()){ //如果是在播放态
mp.pause(); //调用暂停方法
pauseFlag=true; //设置暂停标记
}else if(pauseFlag){
mp.start(); //播放音乐
pauseFlag=false; //设置暂停标记
Toast.makeText(MyActivity.this, "暂停播放", Toast.LENGTH_SHORT).show();
}}
});
bStop.setOnClickListener(new View.OnClickListener() { //停止按钮添加监听器
@Override
public void onClick(View v) {
mp.stop(); //停止播放
mp.reset(); //重置状态到uninitialized态
try{
mp.setDataSource("/sdcard/music/sound_of_dream_DJ.mp3"); //加载音频,进入Initialized状态。
}catch(Exception e){e.printStackTrace();}
try{
mp.prepare(); //进入prepared状态。
}catch(Exception e){e.printStackTrace();}
Toast.makeText(MyActivity.this, "停止播放", Toast.LENGTH_SHORT).show();
}});
bAdd.setOnClickListener(new View.OnClickListener() { //音量增大按钮添加监听器
@Override
public void onClick(View v) {
am.adjustVolume(AudioManager.ADJUST_RAISE, 0); //增大音量
System.out.println("faaa");
Toast.makeText(MyActivity.this, "增大音量", Toast.LENGTH_SHORT).show();
}});
bReduce.setOnClickListener(new View.OnClickListener() { //音量降低按钮添加监听器
@Override
public void onClick(View v) {
am.adjustVolume(AudioManager.ADJUST_LOWER, 0); //减小音量
Toast.makeText(MyActivity.this, "减小音量", Toast.LENGTH_SHORT).show();
}});
}
}
播放的是SD卡上的"/sdcard/music/sound_of_dream_DJ.mp3 "文件。
参考文章:http://wiki.emsym.com/index.php?title=Android_MediaPlayer&oldid=5476
http://blog.csdn.net/chenzheng_java/article/details/6263184
分享到:
相关推荐
Android实现简单音乐播放器(MediaPlayer),供大家参考,具体内容如下 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个简单的音乐播放器,要求功能有: 播放、暂停功能; 进度条显示...
Android 视频播放demo MediaPlayer+Surface实现 播放网络视频: MyMediaPlayer.getInstance().play("http://download.cntv.cn/docuchina/PSA/2017/08/28/3b69f457848e0b497b12e356376515df_mpeg28000000PCM.mp4"); ...
Android 使用mediaplayer播放res/raw文件夹中的音乐的实例 (1)在res文件夹中新建一个文件夹重命名为raw,并且将要播放的音乐放到raw文件夹里面 (2)修改layout目录下的xml布局文件,添加3个按钮空间和一个文本...
Android MediaPlayer 自定义循环次数
android 视频播放 MediaPlayer 开发运用可运行,android视频开发神级材料
这是一个简单的带有进度条的mediaplayer音频播放器demo,只有一个按键,用来播放和暂停。进度条可以通过拖动来改变播放的进度。供Android初学者参考
用Mediaplayer做音乐播放,可以调节声音大小,播放进度、暂停等功能 只有窗体源码,需要自己建项目
Android开发教程_017_使用Mediaplayer添加音乐_标清
android背景音乐、背景音效实例,其中大音频音乐播放使用MediaPlayer实现,小音频音效播放使用SoundPool实现
Android MediaPlayer播放mp3的实例
Android下MediaPlayer播放MP3示例,详细参见博客:http://www.cnblogs.com/plokmju/p/android_MediaPlayer.html
但有些早期的开发者还是更喜欢使用MediaPlayer来播放视频,但由于MediaPlayer主要用于播放音频,因此它没有提供图像输出界面,此时就需要借助于SurfaceView来显示MediaPlayer播放的图像输出。 使用MediaPlayer播放...
音乐播放模块的大体架构 MusicServie 负责维护音乐播放 管理 MediaPlayer 管理 播放队列 Client 与 MusicService 的通讯 MusicService 会开启一个广播接收者,根据相应的广播 Action,处理相应的事件 抽取音乐播放 ...
Android开发 多媒体开发之MediaPlayer源代码
详情见博客:https://blog.csdn.net/qq_20785431/article/details/100543504
Mediaplayer+Service实现的MP3播放器。 1、具有左右滑动屏效果 2、支持后台播放 3、进度条刷新 4、播放模式(顺序、循环、随机、单曲)选择及其他一些基本功能。
上次我们实现了把手机里的音频扫描到,然后放在list集合里面,用ListView展示在手机界面上,如果没有看过的可以去看看本人的博客:Android音乐播放器制作(一)扫描本地音乐显示在手机上 这次是在上一次的基础上直接...
android 系统播放器+SurfaceView实现播放,XML文件定义SurfaceView实现播放,并监听播放器准备,错误,完成,以及进度等函数
Android 使用MediaPlayer播放assets或者raw目录的音频文件 https://blog.csdn.net/qq_31939617/article/details/80491552
簡易Android MediaPlayer,使用android studio開啟,可快轉 倒轉 暫停 停止 撥放,支援音樂時間倒數。