音乐播放器[简单版]--详解和源码

. Mediaplayer 介绍 
        MediaPlayer 类可以用来播放音频、视频和流媒体, MediaPlayer
包含了 Audio 和 Video 的播放功能,   在 Android 的界面上, Music 和 Video 两个应用程序都是调用 MediaPlayer
实现的(附件赋有一些常用方法解释)

2.
实例介绍,主要实现开始、
暂停、停止、上一首、下一首等功能.

1). 整体效果
1.png

2.png

main.xml 中的代码

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:orientation="vertical"
  4.     android:layout_width="fill_parent"
  5.     android:layout_height="fill_parent"
  6.     >
  7.      <ListView   
  8.      android:id="@id/android:list"  
  9.      android:layout_width="fill_parent"   
  10.      android:layout_height="fill_parent"  
  11.      android:layout_weight="1"  
  12.      android:drawSelectorOnTop="false"/>  
  13.      <ImageButton  
  14.      android:id="@+id/LastImageButton"  
  15.      android:layout_width="wrap_content"  
  16.      android:layout_height="wrap_content"     
  17.      android:layout_x="10px"  
  18.      android:layout_y="70px"  
  19.      android:src="@drawable/last"     
  20.      />  
  21.      <ImageButton  
  22.      android:id="@+id/StopImageButton"   
  23.      android:layout_height="wrap_content"     
  24.      android:layout_width="wrap_content"  
  25.      android:layout_x="70px"  
  26.      android:layout_y="70px"  
  27.      android:src="@drawable/stop"   
  28.      />     
  29.      <ImageButton  
  30.      android:id="@+id/StartImageButton"   
  31.      android:layout_height="wrap_content"     
  32.      android:layout_width="wrap_content"   
  33.      android:layout_x="130px"  
  34.      android:layout_y="70px"  
  35.      android:src="@drawable/start"   
  36.      />  
  37.      <ImageButton  
  38.      android:id="@+id/PauseImageButton"   
  39.      android:layout_height="wrap_content"     
  40.      android:layout_width="wrap_content"   
  41.      android:layout_x="190px"  
  42.      android:layout_y="70px"   
  43.      android:src="@drawable/pause"   
  44.      />     
  45.      <ImageButton  
  46.      android:id="@+id/NextImageButton"  
  47.      android:layout_width="wrap_content"  
  48.      android:layout_height="wrap_content"   
  49.      android:layout_x="250px"  
  50.      android:layout_y="70px"  
  51.      android:src="@drawable/next"     
  52.      />  
  53. </AbsoluteLayout>
复制代码

musicitem.xml  中的代码
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <TextView
  3.   xmlns:android="http://schemas.android.com/apk/res/android"
  4.   android:layout_width="fill_parent"
  5.   android:layout_height="fill_parent"
  6.   android:text="@string/music_title"
  7.   android:id="@+id/MusicItem"
  8.   >
  9. </TextView>
复制代码

string.xml   中的代码

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3.     <string name="app_name">简单音乐</string>
  4.     <string name="music_title">播放列表</string>
  5. </resources>
复制代码
Music.java  中的代码

  1. package com.android.simplemusic;
  2. import java.io.File;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import android.app.ListActivity;
  6. import android.media.MediaPlayer;
  7. import android.media.MediaPlayer.OnCompletionListener;
  8. import android.os.Bundle;
  9. import android.view.KeyEvent;
  10. import android.view.View;
  11. import android.view.View.OnClickListener;
  12. import android.widget.ArrayAdapter;
  13. import android.widget.ImageButton;
  14. import android.widget.ListView;
  15. public class Music extends ListActivity  {
  16.    
  17. //播放对象
  18. private MediaPlayer mediaPlayer;

  19. //播放列表
  20. private List<String> musicList=new ArrayList<String>();

  21. //当前播放歌曲的索引
  22. private int currentListItem=0;

  23. //音乐的路径
  24. private static final String MUSIC_PATH="/sdcard/";

  25. //按钮
  26. private ImageButton lastButton=null;
  27. private ImageButton stopButton=null;
  28. private ImageButton startButton=null;
  29. private ImageButton pauseButton=null;
  30. private ImageButton nextButton=null;

  31.     @Override
  32.     public void onCreate(Bundle savedInstanceState) {
  33.         super.onCreate(savedInstanceState);
  34.         setContentView(R.layout.main);
  35.         
  36.         mediaPlayer=new MediaPlayer();
  37.         loadButton();
  38.         musicList();
  39.         listener();
  40.     }
  41.    
  42.     //获取按钮
  43.     private void loadButton(){
  44.      
  45.      lastButton=(ImageButton)findViewById(R.id.LastImageButton);
  46.      stopButton=(ImageButton)findViewById(R.id.StopImageButton);
  47.      startButton=(ImageButton)findViewById(R.id.StartImageButton);
  48.      pauseButton=(ImageButton)findViewById(R.id.PauseImageButton);
  49.      nextButton=(ImageButton)findViewById(R.id.NextImageButton);
  50.     }
  51.    
  52.     //绑定音乐
  53.     private void musicList(){
  54.      
  55.      File home=new File(MUSIC_PATH);
  56.      if(home.listFiles(new MusicFilter()).length>0){
  57.       for(File file:home.listFiles(new MusicFilter())){
  58.        musicList.add(file.getName());
  59.       }
  60.       ArrayAdapter<String> list=new ArrayAdapter<String>(Music.this,R.layout.musicitem,musicList);
  61.       setListAdapter(list);
  62.      }
  63.     }
  64.    
  65.     //监听事件
  66.     private void listener(){
  67.      
  68.      //开始
  69.      startButton.setOnClickListener(new OnClickListener() {
  70.    
  71.    public void onClick(View v) {
  72.     // TODO Auto-generated method stub
  73.     playMusic(MUSIC_PATH+musicList.get(currentListItem));
  74.    }
  75.   });
  76.      
  77.      //停止
  78.      stopButton.setOnClickListener(new OnClickListener() {
  79.    
  80.    public void onClick(View v) {
  81.     // TODO Auto-generated method stub
  82.     mediaPlayer.reset();
  83.    }
  84.   });
  85.      
  86.     //暂停
  87.      pauseButton.setOnClickListener(new OnClickListener() {
  88.    
  89.    public void onClick(View v) {
  90.     // TODO Auto-generated method stub
  91.     if(mediaPlayer.isPlaying()){
  92.      mediaPlayer.pause();
  93.     }else{
  94.      mediaPlayer.start();
  95.     }
  96.    }
  97.   });
  98.      
  99.      //下一首
  100.      nextButton.setOnClickListener(new OnClickListener() {
  101.    
  102.    public void onClick(View v) {
  103.     // TODO Auto-generated method stub
  104.     nextMusic();
  105.    }
  106.   });
  107.      
  108.      //上一首
  109.      lastButton.setOnClickListener(new OnClickListener() {
  110.    
  111.    public void onClick(View v) {
  112.     // TODO Auto-generated method stub
  113.     lastMusic();
  114.    }
  115.   });
  116.     }
  117.    
  118.     //播放音乐
  119.     private void playMusic(String path){
  120.      try{
  121.       mediaPlayer.reset();
  122.       mediaPlayer.setDataSource(path);
  123.       mediaPlayer.prepare();
  124.       mediaPlayer.start();
  125.       mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
  126.    
  127.     public void onCompletion(MediaPlayer mp) {
  128.      // TODO Auto-generated method stub
  129.      
  130.     }
  131.    });
  132.      }catch(Exception e){
  133.       e.printStackTrace();
  134.      }
  135.     }
  136.    
  137.     //下一首
  138.     private void nextMusic(){
  139.      if(++currentListItem>=musicList.size()){
  140.       currentListItem=0;
  141.      }else{
  142.       playMusic(MUSIC_PATH+musicList.get(currentListItem));
  143.      }
  144.     }
  145.    
  146.     //上一首
  147.     private void lastMusic(){
  148.      if(currentListItem!=0){
  149.       if(--currentListItem>=0){
  150.        playMusic(MUSIC_PATH+musicList.get(currentListItem));
  151.       }else{
  152.        playMusic(MUSIC_PATH+musicList.get(currentListItem));
  153.       }
  154.      }else{
  155.       playMusic(MUSIC_PATH+musicList.get(currentListItem));
  156.      }
  157.     }
  158.    
  159.     //当用户返回时结束音乐并释放音乐对象
  160.     @Override
  161. public boolean onKeyDown(int keyCode, KeyEvent event) {
  162.   // TODO Auto-generated method stub
  163.      if(keyCode==KeyEvent.KEYCODE_BACK){
  164.       mediaPlayer.stop();
  165.       mediaPlayer.release();
  166.       this.finish();
  167.       return true;
  168.      }
  169.   return super.onKeyDown(keyCode, event);
  170. }
  171.    
  172.     //当选择列表项时播放音乐
  173.     @Override
  174. protected void onListItemClick(ListView l, View v, int position, long id) {
  175.   // TODO Auto-generated method stub
  176.      currentListItem=position;
  177.      playMusic(MUSIC_PATH+musicList.get(currentListItem));
  178.   super.onListItemClick(l, v, position, id);
  179. }
  180.    
  181. }
复制代码


  MusicFilter.java  中的代码

  1. package com.android.simplemusic;
  2. import java.io.File;
  3. import java.io.FilenameFilter;
  4. public class MusicFilter implements FilenameFilter{
  5. public boolean accept(File dir, String filename) {
  6.   // TODO Auto-generated method stub
  7.   return (filename.endsWith(".mp3"));
  8. }
  9. }
复制代码
MediaPlayer 常用方法介绍

方法:create(Context context, Uri uri)  
解释:静态方法,通过Uri创建一个多媒体播放器。

方法:create(Context context, int resid)
解释:静态方法,通过资源ID创建一个多媒体播放器

方法:create(Context context, Uri uri, SurfaceHolder holder)
解释:静态方法,通过Uri和指定 SurfaceHolder 【抽象类】 创建一个多媒体播放器

方法: getCurrentPosition()
解释:返回 Int, 得到当前播放位置

方法: getDuration()
解释:返回 Int,得到文件的时间

方法:getVideoHeight()
解释:返回 Int ,得到视频的高度

方法:getVideoWidth()
解释:返回 Int,得到视频的宽度

方法:isLooping()
解释:返回 boolean ,是否循环播放

方法:isPlaying()
解释:返回 boolean,是否正在播放

方法:pause()
解释:无返回值 ,暂停

方法:prepare()
解释:无返回值,准备同步

方法:prepareAsync()
解释:无返回值,准备异步

方法:release()
解释:无返回值,释放 MediaPlayer  对象

方法:reset()
解释:无返回值,重置 MediaPlayer  对象

方法:seekTo(int msec)
解释:无返回值,指定播放的位置(以毫秒为单位的时间)

方法:setAudioStreamType(int streamtype)
解释:无返回值,指定流媒体的类型

方法:setDataSource(String path)
解释:无返回值,设置多媒体数据来源【根据 路径】

方法:setDataSource(FileDescriptor fd, long offset, long length)
解释:无返回值,设置多媒体数据来源【根据 FileDescriptor】

方法:setDataSource(FileDescriptor fd)
解释:无返回值,设置多媒体数据来源【根据 FileDescriptor】

方法:setDataSource(Context context, Uri uri)
解释:无返回值,设置多媒体数据来源【根据 Uri】

方法:setDisplay(SurfaceHolder sh)
解释:无返回值,设置用 SurfaceHolder 来显示多媒体

方法:setLooping(boolean looping)
解释:无返回值,设置是否循环播放

事件:setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener listener)
解释:监听事件,网络流媒体的缓冲监听

事件:setOnCompletionListener(MediaPlayer.OnCompletionListener listener)
解释:监听事件,网络流媒体播放结束监听

事件:setOnErrorListener(MediaPlayer.OnErrorListener listener)
解释:监听事件,设置错误信息监听

事件:setOnVideoSizeChangedListener(MediaPlayer.OnVideoSizeChangedListener listener)
解释:监听事件,视频尺寸监听

方法:setScreenOnWhilePlaying(boolean screenOn)
解释:无返回值,设置是否使用 SurfaceHolder 显示

方法:setVolume(float leftVolume, float rightVolume)
解释:无返回值,设置音量

方法:start()
解释:无返回值,开始播放

方法:stop()
解释:无返回值,停止播放


music.rar
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值