mac media playerPlayer播放完mp3文件需要主动release吗

下次自动登录
现在的位置:
& 综合 & 正文
Android模拟器中实现音、视频文件的断点播放
【1】使用MediaPlayer实现一般的音频播放
MediaPlayer播放通常的音频文件
<li class="" style="margin-top: 0px ! margin-right: 0px ! margin-bottom: 0px ! margin-left: 0px ! padding-top: 0px ! padding-right: 3px ! padding-bottom: 0px ! padding-left: 10px ! border-to
&&&&推荐文章:
【上篇】【下篇】5827人阅读
在Android中可以使用MediaPlayer来播放音频,常见使用方法如下:
MediaPlayer mediaPlayer = new MediaPlayer();
if (mediaPlayer.isPlaying()) {
mediaPlayer.reset();//重置为初始状态
mediaPlayer.setDataSource(&/mnt/sdcard/god.mp3&);
mediaPlayer.prepare();//缓冲
mediaPlayer.start();//开始或恢复播放
mediaPlayer.pause();//暂停播放
mediaPlayer.start();//恢复播放
mediaPlayer.stop();//停止播放
mediaPlayer.release();//释放资源
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {//播出完毕事件
@Override public void onCompletion(MediaPlayer arg0) {
mediaPlayer.release();
mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {// 错误处理事件
@Override public boolean onError(MediaPlayer player, int arg1, int arg2) {
mediaPlayer.release();
下面介绍一个音频播放的简易例子,在这里面除了调用MediaPlayer的API外,还需要处理当播放音乐是遇到来电等事件时的情况,要保证接听完电话后还能继续播放音乐,需要覆写Activity的生命周期的几个方法。
播放过程中,接听电话,会保存当前播放位置,挂断电话后,继续播放
布局文件layout/main.xml
&?xml version=&1.0& encoding=&utf-8&?&
&LinearLayout xmlns:android=&/apk/res/android&
android:orientation=&vertical&
android:layout_width=&fill_parent&
android:layout_height=&fill_parent&
android:layout_width=&fill_parent&
android:layout_height=&wrap_content&
android:text=&@string/filename&
android:layout_width=&fill_parent&
android:layout_height=&wrap_content&
android:text=&my life.mp3&
android:id=&@+id/filename&
&LinearLayout
android:orientation=&horizontal&
android:layout_width=&fill_parent&
android:layout_height=&wrap_content&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:text=&@string/play&
android:id=&@+id/play&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:text=&@string/pause&
android:id=&@+id/pause&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:text=&@string/reset&
android:id=&@+id/reset&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:text=&@string/stop&
android:id=&@+id/stop&
&/LinearLayout&
&/LinearLayout&
数据文件values/strings.xml
&?xml version=&1.0& encoding=&utf-8&?&
&resources&
&string name=&hello&&Hello World, PlayActivity!&/string&
&string name=&app_name&&音乐播放器&/string&
&string name=&filename&&音乐文件&/string&
&string name=&play&&播放&/string&
&string name=&pause&&暂停&/string&
&string name=&reset&&重播&/string&
&string name=&stop&&停止&/string&
&string name=&continue1&&继续&/string&
&/resources&
package com.android.
import java.io.F
import java.io.IOE
import android.app.A
import android.media.MediaP
import android.os.B
import android.os.E
import android.util.L
import android.view.V
import android.widget.B
import android.widget.EditT
public class AudioPlayerActivity extends Activity {
private static final String TAG = &AudioPlayerActivity&;
private EditText filenameT
private MediaPlayer mediaP
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
filenameText = (EditText)this.findViewById(R.id.filename);
mediaPlayer = new MediaPlayer();
ButtonClickListener listener = new ButtonClickListener();
Button playButton = (Button)this.findViewById(R.id.play);
Button pauseButton = (Button)this.findViewById(R.id.pause);
Button resetButton = (Button)this.findViewById(R.id.reset);
Button stopButton = (Button) this.findViewById(R.id.stop);
playButton.setOnClickListener(listener);
pauseButton.setOnClickListener(listener);
resetButton.setOnClickListener(listener);
stopButton.setOnClickListener(listener);
Log.i(TAG, &onCreate()&);
protected void onRestoreInstanceState(Bundle savedInstanceState) {
this.filename = savedInstanceState.getString(&filename&);
this.position = savedInstanceState.getInt(&position&);
super.onRestoreInstanceState(savedInstanceState);
Log.i(TAG, &onRestoreInstanceState()&);
protected void onSaveInstanceState(Bundle outState) {
outState.putString(&filename&, filename);
outState.putInt(&position&, position);
super.onSaveInstanceState(outState);
Log.i(TAG, &onSaveInstanceState()&);
protected void onPause() {//如果突然电话到来,停止播放音乐
if(mediaPlayer.isPlaying()){
position = mediaPlayer.getCurrentPosition();//保存当前播放点
mediaPlayer.stop();
super.onPause();
protected void onResume() {
if(position&0 && filename!=null){//如果电话结束,继续播放音乐
mediaPlayer.seekTo(position);
position = 0;
} catch (IOException e) {
Log.e(TAG, e.toString());
super.onResume();
protected void onDestroy() {
mediaPlayer.release();
super.onDestroy();
Log.i(TAG, &onDestroy()&);
private final class ButtonClickListener implements View.OnClickListener{
public void onClick(View v) {
filename = filenameText.getText().toString();//先得到文本框中的内容
Button button = (Button)//得到button
switch (v.getId()) {//通过传过来的Buttonid可以判断Button的类型
case R.id.play://播放
case R.id.pause:
if(mediaPlayer.isPlaying()){
mediaPlayer.pause();
button.setText(R.string.continue1);//让这个按钮上的文字显示为继续
mediaPlayer.start();//继续播放
button.setText(R.string.pause);
case R.id.reset:
if(mediaPlayer.isPlaying()){
mediaPlayer.seekTo(0);//让它从0开始播放
play();//如果它没有播放,就让它开始播放
case R.id.stop:
if(mediaPlayer.isPlaying()) mediaPlayer.stop();//如果它正在播放的话,就让他停止
} catch (Exception e) {//抛出异常
Log.e(TAG, e.toString());
private void play() throws IOException {
File audioFile = new File(Environment.getExternalStorageDirectory(),filename);
mediaPlayer.reset();
mediaPlayer.setDataSource(audioFile.getAbsolutePath());
mediaPlayer.prepare();
mediaPlayer.start();//播放
  另外, 在Android开发中我们经常使用MediaPlayer来播放音频文件,但是MediaPlayer存在一些不足,例如:资源占用量较高、延迟时间较长、不支持多个音频同时播放等。这些缺点决定了MediaPlayer在某些场合的使用情况不会很理想,例如在对时间精准度要求相对较高的游戏开发中。
在游戏开发中我们经常需要播放一些游戏音效(比如:子弹爆炸,物体撞击等),这些音效的共同特点是短促、密集、延迟程度小。在这样的场景下,我们可以使用SoundPool代替MediaPlayer来播放这些音效。
SoundPool(android.media.SoundPool),顾名思义是声音池的意思,主要用于播放一些较短的声音片段,支持从程序的资源或文件系统加载。与MediaPlayer相比,SoundPool的优势在于CPU资源占用量低和反应延迟小。另外,SoundPool还支持自行设置声音的品质、音量、播放比率等参数,支持通过ID对多个音频流进行管理。
就现在已知的资料来说,SoundPool有一些设计上的BUG,从固件版本1.0开始有些还没有修复,我们在使用中应该小心再小心。相信将来Google会修复这些问题,但我们最好还是列出来:
  1. SoundPool最大只能申请1M的内存空间,这就意味着我们只能用一些很短的声音片段,而不是用它来播放歌曲或者做游戏背景音乐。
  2. SoundPool提供了pause和stop方法,但这些方法建议最好不要轻易使用,因为有些时候它们可能会使你的程序莫名其妙的终止。建议使用这两个方法的时候尽可能多做测试工作,还有些朋友反映它们不会立即中止播放声音,而是把缓冲区里的数据播放完才会停下来,也许会多播放一秒钟。
  3. SoundPool的效率问题。其实SoundPool的效率在这些播放类中算是很好的了,但是有的朋友在G1中测试它还是有100ms左右的延迟,这可能会影响用户体验。也许这不能管SoundPool本身,因为到了性能比较好的Droid中这个延迟就可以让人接受了。
  在现阶段SoundPool有这些缺陷,但也有着它不可替代的优点,基于这些我们建议大在如下情况中多使用SoundPool:1.应用程序中的声效(按键提示音,消息等)2.游戏中密集而短暂的声音(如多个飞船同时爆炸)
开发步骤:
1& 往项目的res/raw目录中放入音效文件。
2& 新建SoundPool对象,然后调用SoundPool.load()加载音效,调用SoundPool.play()方法播放指定音效文件。
public class AudioActivity extends Activity {
private SoundP
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//指定声音池的最大音频流数目为10,声音品质为5
pool = new SoundPool(10, AudioManager.STREAM_SYSTEM, 5);
final int sourceid = pool.load(this, R.raw.pj, 0);//载入音频流,返回在池中的id
Button button = (Button)this.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//播放音频,第二个参数为左声道音量;第三个参数为右声道音量;第四个参数为优先级;第五个参数为循环次数,0不循环,-1循环;第六个参数为速率,速率最低0.5最高为2,1代表正常速度
pool.play(sourceid, 1, 1, 0, -1, 1);
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:178137次
积分:2249
积分:2249
排名:第6811名
原创:60篇
转载:13篇
评论:101条
(2)(2)(42)(3)(18)(2)(1)(1)(2)android中如何判断mediaplayer已经停止?-android mediaplayer如何防止几个音频...
android中如何判断mediaplayer已经停止?
android中如何判断mediaplayer已经停止?
用isplaying()方法好像不行,还是自动release,如果不自动release掉一首歌放完了mediaplayer是不是会自动release掉,播放完后是不是要release掉才能重新播放,为什么接着重新创建后再调用start()不能播放,老出错,播放同一首歌如果不是循环播放,不知道我理解的是不是有问题,如果是的话,那么如何判断它已经停止了呢,而只能stop后才能播放
2;stop()--reset()--&gt,建议多看代码吧。你对mediaplayer整个流程的理解有点混乱。3。不是一首歌完了之后要用的.OnCompletionListener mCompleteListener的方法监听;prepare()--&gt、判断停止是要用到 MediaPlayer:reset()--&重来上述流程一遍、start和stop之间循环的流程应该是;start()--&setDataSource(path)--&gt,比如退出,而是你不再使用mp之后才调用、release是当MediaPlayer对象(以下简称mp)不再使用才去释放mp所占有的资源1
手机软件com.android.medi检测出存在病毒风险,卸载不了,怎么才能卸载? ……
您好 从名字上看应该是系统文件 建议谨慎卸载,可能导致系统不能正常使用 如果卸载需要root权限 您...
con.android.medi...怎么删除?? ……
过去root权限,给予管家权限,卸载软件,手机内置,选择卸载,若不能的话,考虑下载ES文件浏览器,给...
c0m、android、mediac0de是什么意思 ……
媒体相关吧,停止运行也没问题,解决办法,找到这个程序清除缓存(在设置→应用程序) 或者是刷机
我不小心把手机上的com.android.mediacenter和com.android.medi ……
不会 那些只是一些没用的文件夹罢了
最近手机总是无端端弹出广告,百度卫士帮我搜到一个病毒,叫com.android.medi……,想卸 ……
360清理大师
我的4G金士顿U盘检测芯片制造商是擎泰,是否是真品,如何判断? ……
是正品! 也是真品 注意,KingSton金士顿 主要生产闪存芯片 而 skymedi(擎泰)设计的...
求主控芯片skymedi(擎泰)SK6215/SSS6691量产工具 和具体安装USB-CDROM的... ……
先判断到地是(擎泰)SK6215 还是兴创的6691,还有2中都不是的可能。
我的4G金士顿U盘检测芯片制造商是东芝,是否是真品,如何判断? ……
我的4G金士顿U盘检测芯片制造商是东芝,是否是真品,如何判断?
...金士顿U...
如何学好英语 ……
百度知道 & 教育/科学 & 外语学习 & 英语考试 如何学好英语 ...“向内,在内,内侧” in...
我玩的是英文版的 主攻PK 跪求怎么加点 ……
具体怎样搭配,在下面的vs各种char中详述。 Charm:见楼下gc:3个fhr bone ......
你可能感兴趣的主题Step 1 :新建一个Android工程,命名为MediaPlayerDemo.
Step 2 :准备素材,在res下建一个raw文件夹,将foollove.mp3导入,将play.png,pause.png,及stop.png导入res/drawable文件夹下.
Step 3: 设计UI布局,在main.xml里放入三个ImageButton(这里可以用AbsoluteLayout,或者RelativeLayout实现,我用后者).代码如下:
&?xml version="1.0" encoding="utf-8"?&&RelativeLayout& android:layout_width="fill_parent"& android:layout_height="fill_parent"& android:background="@drawable/white"& xmlns:android=" "&& &TextView&&& android:id="@+id/myTextView1"&&& android:layout_width="wrap_content"&&& android:layout_height="wrap_content"&&& android:text="@string/hello"&&& android:layout_alignParentTop="true"&&& android:layout_alignParentLeft="true"& && &/TextView&& &ImageButton&&& android:id="@+id/myButton1"&&& android:layout_width="wrap_content"&&& android:layout_height="wrap_content"&&& android:src="@drawable/play"&&& android:layout_below="@+id/myTextView1"& && &/ImageButton&& &ImageButton&&& android:id="@+id/myButton3"&&& android:layout_width="wrap_content"&&& android:layout_height="wrap_content"&&& android:src="@drawable/pause"&&& android:layout_alignTop="@+id/myButton1"&&& android:layout_toRightOf="@+id/myButton1"& && &/ImageButton&& &ImageButton&&& android:id="@+id/myButton2"&&& android:layout_width="wrap_content"&&& android:layout_height="wrap_content"&&& android:src="@drawable/stop"&&& android:layout_alignTop="@+id/myButton1"&&& android:layout_toRightOf="@+id/myButton3"& && &/ImageButton&&/RelativeLayout&
Step 4 :主控制程序MediaPlayerDemo.java的实现,代码如下:
package com.android.
import android.app.Aimport android.media.MediaPimport android.os.Bimport android.view.Vimport android.widget.ImageBimport android.widget.TextV
public class MediaPlayerDemo extends Activity {&& &private ImageButton mb1,mb2,mb3;&private TextV&private MediaP&//声明一个变量判断是否为暂停,默认为false&private boolean isPaused =&&& public void onCreate(Bundle savedInstanceState) {&&&&&&& super.onCreate(savedInstanceState);&&&&&&& setContentView(R.layout.main);&&&&&&& &&&&&&& //通过findViewById找到资源&&&&&&& mb1 = (ImageButton)findViewById(R.id.myButton1);&&&&&&& mb2 = (ImageButton)findViewById(R.id.myButton2);&&&&&&& mb3 = (ImageButton)findViewById(R.id.myButton3);&&&&&&& tv = (TextView)findViewById(R.id.myTextView1);&&&&&&& &&&&&&& //创建MediaPlayer对象,将raw文件夹下的lovefool.mp3&&&&&&& mp = MediaPlayer.create(this,R.raw.lovefool);&&&&&&& //增加播放音乐按钮的事件&&&&&&& mb1.setOnClickListener(new ImageButton.OnClickListener(){&& @Override&& public void onClick(View v) {&&& try {&&&& &&&& if(mp != null)&&&& {&&&&& mp.stop();&&&& }&&& &&&& mp.prepare();&&&& mp.start();&&&& tv.setText("音乐播放中...");&&& } catch (Exception e) {&&&& tv.setText("播放发生异常...");&&&& e.printStackTrace();&&& }&&& && }&&&&& &&&&&&& });&&&&&&& &&&&&&& mb2.setOnClickListener(new ImageButton.OnClickListener(){&& @Override&& public void onClick(View v) {&&& try {&&&& if(mp !=null)&&&& {&&&&& mp.stop();&&&&& tv.setText("音乐停止播放...");&&&& }&&& } catch (Exception e) {&&&& tv.setText("音乐停止发生异常...");&&&& e.printStackTrace();&&& }&&& && }&&&&&&&& &&&&&&& });&&&&&&& &&&&&&& mb3.setOnClickListener(new ImageButton.OnClickListener(){&& @Override&& public void onClick(View v) {&&& try {&&&& if(mp !=null)&&&& {&&&&& if(isPaused==false)&&&&& {&&&&&& mp.pause();&&&&&& isPaused=&&&&&& tv.setText("停止播放!");&&&&& }&&&&& else if(isPaused==true)&&&&& {&&&&&& mp.start();&&&&&& isPaused =&&&&&& tv.setText("开始播发!");&&&&& }&&&& }&&& } catch (Exception e) {&&&& tv.setText("发生异常...");&&&& e.printStackTrace();&&& }&&& && }&&&&&&&& &&&&&&& });&&&&&&& &&&&&&& /* 当MediaPlayer.OnCompletionLister会运行的Listener */&&&&&&& mp.setOnCompletionListener(&&&&&&&&& new MediaPlayer.OnCompletionListener() &&&&&&& { &&&&&&&&& // @Override &&&&&&&&& /*覆盖文件播出完毕事件*/&&&&&&&&& public void onCompletion(MediaPlayer arg0) &&&&&&&&& { &&&&&&&&&&& try &&&&&&&&&&& { &&&&&&&&&&&&& /*解除资源与MediaPlayer的赋值关系&&&&&&&&&&&&&& * 让资源可以为其它程序利用*/&&&&&&&&&&&&& mp.release(); &&&&&&&&&&&&& /*改变TextView为播放结束*/&&&&&&&&&&&&& tv.setText("音乐播发结束!"); &&&&&&&&&&& } &&&&&&&&&&& catch (Exception e) &&&&&&&&&&& { &&&&&&&&&&&&& tv.setText(e.toString()); &&&&&&&&&&&&& e.printStackTrace(); &&&&&&&&&&& } &&&&&&&&& } &&&&&&& }); &&&&&&&& &&&&&&& /* 当MediaPlayer.OnErrorListener会运行的Listener */&&&&&&& mp.setOnErrorListener(new MediaPlayer.OnErrorListener()&&&&&&& {&&&&&&&&& @Override&&&&&&&&& /*覆盖错误处理事件*/&&&&&&&&& public boolean onError(MediaPlayer arg0, int arg1, int arg2)&&&&&&&&& {&&&&&&&&&&& // TODO Auto-generated method stub&&&&&&&&&&& try&&&&&&&&&&& {&&&&&&&&&&&&& /*发生错误时也解除资源与MediaPlayer的赋值*/&&&&&&&&&&&&& mp.release();&&&&&&&&&&&&& tv.setText("播放发生异常!");&&&&&&&&&&& }&&&&&&&&&&& catch (Exception e)&&&&&&&&&&& {&&&&&&&&&&&&& tv.setText(e.toString()); &&&&&&&&&&&&& e.printStackTrace(); &&&&&&&&&&& } &&&&&&&&&&& &&&&&&&&& } &&&&&&& }); &&&&& } & }
本文来自CSDN博客,转载请标明出处:
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:20933次
排名:千里之外
原创:46篇
(1)(1)(1)(14)(1)(1)(12)(8)(7)

我要回帖

更多关于 vlc media player 的文章

 

随机推荐