Android学习篇章51-MediaPlayer-音频播放
2013-11-05 22:16
387 查看
activity:
xml:
public class Mp3PlayerActivity extends Activity { //这个对象属于重量级对象 所以当不用时需要 及时销毁 MediaPlayer mp=null; boolean isPause=false; Button btn3=null; int pos=0;//记录当前播放的进度 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_mp3_player); btn3=(Button)findViewById(R.id.btn3); } public void clickBtn(View view) { int id= view.getId(); if(id==R.id.btn1) { //加载音乐 //loadMp3FromRes(); //loadMp3FromSD(); loadMp3FromAssets(); }else if(id==R.id.btn2) { stopPlayer();//停止播放mp3 }else if(id==R.id.btn3) { // 暂停 /恢复 if(isPause) { resumePlayer(); }else { pausePlayer(); } } } public void pausePlayer() { if(isPause==false && mp!=null && mp.isPlaying()) { //保存播放进度 得到的是当前播放时间的毫秒数 新版API中这个pos可以不用记录 pos=mp.getCurrentPosition(); mp.pause(); isPause=true; btn3.setText("继续"); } } public void resumePlayer() { //恢复播放 if(isPause&&mp!=null && !mp.isPlaying()) { mp.seekTo(pos) ; //恢复播放进度 兼容老版本 mp.start(); isPause=false; btn3.setText("暂停"); } } public void stopPlayer() { if(mp!=null && mp.isPlaying()) { mp.stop(); } } public void loadMp3FromRes() { //这个create方法每一次调用都会创建一个新的mp对象,批量播放歌曲时会比较耗费资源 mp=MediaPlayer.create(this, R.raw.test); mp.start(); } public void loadMp3FromSD() { closePlayer(); mp=new MediaPlayer(); String path=Environment.getExternalStorageDirectory()+"/musics/test.mp3"; try { mp.setDataSource(path); mp.prepare();//加载Mp3文件 必须在start之前 mp.start(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void loadMp3FromAssets() { closePlayer(); mp=new MediaPlayer(); try { AssetFileDescriptor afd=this.getAssets().openFd("test.mp3"); //获得文件描述符对象 并交给player mp.setDataSource(afd.getFileDescriptor()); mp.prepare(); mp.start(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override protected void onDestroy() { // TODO Auto-generated method stub //closePlayer(); super.onDestroy(); } public void closePlayer() { if(mp!=null) { mp.release(); mp=null; } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.mp3_player, menu); return true; } }
xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".Mp3PlayerActivity" > <Button android:id="@+id/btn1" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="clickBtn" android:text="播放" /> <Button android:id="@+id/btn2" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="clickBtn" android:text="停止" /> <Button android:id="@+id/btn3" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="clickBtn" android:text="暂停" /> </LinearLayout>
相关文章推荐
- Android中Context详解
- android 二维码识别技术分享
- Android学习篇章50-MediaStore-Intent启动照相
- Android学习篇章49-SurfaceView-照相
- android 开发工具分享
- Android学习篇章48-VideoView视频播放-控制屏幕大小
- android 主动推送技术分享
- Android学习篇章47-VideoView视频播放
- 浅谈android百度地图开发
- Android之Inflate()方法用途+setContentView和inflate区别
- Android终端配置isatap隧道使用IPV6的方法
- Please ensure that adb is correctly located at问题解决
- Android anr log 分析
- Android代号
- Android四大组件之ContentProvider
- Android反编译详解(附图)
- NineOldAndroidsDemos 学习(5) AnimationCloning 和 AnimationLoading
- Android四种启动模式
- Android官方使低版本系统(2.1)支持ActionBar的方法
- Android触摸屏失效后的操作方法