android如何长时间音乐播放实现MediaPlayer
android如何长时间音乐播放实现MediaPlayer
发布时间:2015-06-05 来源:查字典编辑
摘要:长时间的音乐因为体积比较大,放在手机内存中,对资源的占用太大。MediaPlayer类可以用来播放音频、视频和流媒体,MediaPlayer...

长时间的音乐因为体积比较大,放在手机内存中,对资源的占用太大。

MediaPlayer类可以用来播放音频、视频和流媒体,MediaPlayer包含了Audio和Video的播放功能。

在Android的界面上,Music和Video两个应用程序都是调用MediaPlayer实现的。

MediaPlayer在底层是基于OpenCore(PacketVideo)的库实现的。

一.基础知识:

首先来看看MediaPlayer的生命周期:

android如何长时间音乐播放实现MediaPlayer1

下边是MediaPlayer提供的常用方法:

[java]

方法 说明

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 停止播放

方法 说明

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来播放音乐的步骤):

[java]

MediaPlayer mp = new MediaPlayer();//构建MediaPlayer对象

mp.setDataSource("/sdcard/test.mp3");//设置文件路径

mp.prepare();//准备

mp.start();//开始播放

MediaPlayer mp = new MediaPlayer();//构建MediaPlayer对象

mp.setDataSource("/sdcard/test.mp3");//设置文件路径

mp.prepare();//准备

mp.start();//开始播放

上面四行代码实现了媒体文件的播放,但是如果还想再加入对音量的控制,就要涉及到AudioMananger类。

AudioManager中常用的方法如下:

A. 获取声音管理器:

[java]

AudioManager audioManager = (AudioManager) this.getSystemService(AUDIO_SERVICE);

AudioManager audioManager = (AudioManager) this.getSystemService(AUDIO_SERVICE);

B、设置声音模式:

[java]

//声音模式

AudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);

//静音模式

AudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);

//震动模式

AudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);

//声音模式

AudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);

//静音模式

AudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);

//震动模式

AudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);

C、调整声音大小:

[java]

//减少声音音量

AudioManager.adjustVolume(AudioManager.ADJUST_LOWER, 0);

//调大声音音量

AudioManager.adjustVolume(AudioManager.ADJUST_RAISE, 0);

//减少声音音量

AudioManager.adjustVolume(AudioManager.ADJUST_LOWER, 0);

//调大声音音量

AudioManager.adjustVolume(AudioManager.ADJUST_RAISE, 0);

D、获取音量大小:

[java]

// 取得当前设备的当前音量

AudioManager.getStreamVolume(int streamType)

// 取得当前设备的最大音量

AudioManager.getStreamMaxVolume(int streamType)

// 取得当前设备的当前音量

AudioManager.getStreamVolume(int streamType)

// 取得当前设备的最大音量

AudioManager.getStreamMaxVolume(int streamType)

E、其他:

[java]

getMode()获取音频模式

getRingerMode()获取铃声震动模式

setRingerMode(int ringerMode) 改变铃声模式

这里如果使用了和手机震动有关的模式,记得添加权限。android.permission.VIBRATE哦!

getMode()获取音频模式

getRingerMode()获取铃声震动模式

setRingerMode(int ringerMode) 改变铃声模式

这里如果使用了和手机震动有关的模式,记得添加权限。android.permission.VIBRATE哦!

二.编程实现:

1. 界面编辑(reslayoutmain.xml):

[java]

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

android:text="播放音乐"

android:id="@+id/ButtonPlay"

android:layout_width="fill_parent"

android:layout_height="wrap_content">

android:text="暂停音乐"

android:id="@+id/ButtonPause"

android:layout_width="fill_parent"

android:layout_height="wrap_content">

android:text="停止音乐"

android:id="@+id/ButtonStop"

android:layout_width="fill_parent"

android:layout_height="wrap_content">

android:text="增大音乐"

android:id="@+id/ButtonVAdd"

android:layout_width="fill_parent"

android:layout_height="wrap_content">

android:text="降低音乐"

android:id="@+id/ButtonVReduce"

android:layout_width="fill_parent"

android:layout_height="wrap_content">

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

android:text="播放音乐"

android:id="@+id/ButtonPlay"

android:layout_width="fill_parent"

android:layout_height="wrap_content">

android:text="暂停音乐"

android:id="@+id/ButtonPause"

android:layout_width="fill_parent"

android:layout_height="wrap_content">

android:text="停止音乐"

android:id="@+id/ButtonStop"

android:layout_width="fill_parent"

android:layout_height="wrap_content">

android:text="增大音乐"

android:id="@+id/ButtonVAdd"

android:layout_width="fill_parent"

android:layout_height="wrap_content">

android:text="降低音乐"

android:id="@+id/ButtonVReduce"

android:layout_width="fill_parent"

android:layout_height="wrap_content">

界面布局效果如下:

android如何长时间音乐播放实现MediaPlayer2

2. 代码编辑(srcwyfzclMyActivity.java):

[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(yout.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();

}});

}

}

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(yout.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 "文件。

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新安卓软件开发学习
热门安卓软件开发学习
编程开发子分类