Android 音乐播放

Posted Cfan1236

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 音乐播放相关的知识,希望对你有一定的参考价值。

android简单音乐播放控制代码

 

这个几个月业余时间一直在做一个android项目,里面涉及到了音乐播放功能。很简单那种,播放、暂停、上一曲、下一曲、音量调节等。

音乐播放主要使用的对象是MediaPlayer,这个对象很强大 也提供了很多功能。

mediaplayer 音乐播放主要控制类

  1 package com.weizhi.common;
  2 
  3 import java.util.ArrayList;
  4 import android.media.MediaPlayer;
  5 import android.media.MediaPlayer.OnCompletionListener;
  6 
  7 /***
  8  * 音乐播放控制
  9  * 
 10  * @author wangr
 11  * @date 2016-6-13
 12  */
 13 public class MusicPlay
 14 {
 15     private MediaPlayer mediaPlayer;
 16     // 当前歌曲播放索引
 17     private int songIndex = 0;
 18     // 歌曲播放列表
 19     private ArrayList<String> songArrayList;
 20     // 是否开始播放
 21     private boolean play = false;
 22     // 回调
 23     private MusicCallBack callBack;
 24 
 25     /***
 26      * 音乐播放构造函数
 27      * 
 28      * @param playList
 29      *            播放列表
 30      * @param callBack
 31      *            回调函数 用于传回当前播放曲目
 32      */
 33     public MusicPlay(ArrayList<String> playList, MusicCallBack callBack)
 34     {
 35         this.callBack = callBack;
 36         songArrayList = playList;
 37 
 38         mediaPlayer = new MediaPlayer();
 39         mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
 40 
 41             // 播放完毕
 42             @Override
 43             public void onCompletion(MediaPlayer arg0)
 44             {
 45                 // 播放完毕直接下一首
 46                 nextSong();
 47 
 48             }
 49         });
 50 
 51     }
 52 
 53     /***
 54      * 下一首
 55      */
 56     public void nextSong()
 57     {
 58 
 59         if (songIndex < songArrayList.size() - 1)
 60         {
 61             songIndex++;
 62             songPlay();
 63         } else
 64         {
 65             // 播放第一首
 66             songIndex = 0;
 67             songPlay();
 68 
 69         }
 70     }
 71 
 72     /**
 73      * 上一首
 74      */
 75     public void upSong()
 76     {
 77         // 当前等于第一首
 78         if (songIndex == 0)
 79         {
 80             // 播放最后一首
 81             songIndex = songArrayList.size() - 1;
 82             songPlay();
 83         } else
 84         {
 85 
 86             songIndex--;
 87             songPlay();
 88 
 89         }
 90     }
 91 
 92     /***
 93      * 播放
 94      */
 95     private void songPlay()
 96     {
 97         try
 98         {
 99             if (songArrayList.size() > 0)
100             {
101                 play = true;
102                 mediaPlayer.reset();
103                 mediaPlayer.setDataSource(songArrayList.get(songIndex));
104                 mediaPlayer.prepare();
105                 mediaPlayer.start();
106 
107                 if (this.callBack != null)
108                 {
109                     // 显示当前播放歌曲
110                     callBack.currentPlayer(songArrayList.get(songIndex)
111                             .toString());
112                 }
113             }
114         }
115 
116         catch (Exception e)
117         {
118             e.printStackTrace();
119         }
120 
121     }
122 
123     /***
124      * 播放暂停 适用于播放暂停都是一个按钮
125      */
126     public void pausePlay()
127     {
128         if (mediaPlayer.isPlaying())
129         {
130             mediaPlayer.pause();
131 
132         } else
133         {
134             // 判断是否已经播放 如果已经播放则当前是暂停 则调用继续播放
135             if (play)
136             {
137                 mediaPlayer.start();// 继续播放
138             } else
139             {
140                 // 首次播放
141                 songPlay();
142             }
143         }
144     }
145 
146     /**
147      * 设置音量
148      * 本身有两个参数 left and right 这里我就设同一个值
149      * @param ve 范围 0.0-1.0
150      */
151     public void setVolume(float ve)
152     {
153         mediaPlayer.setVolume(ve, ve);
154     }
155 }

顺便附上文件搜索类

 1 package com.weizhi.common;
 2 
 3 import java.io.File;
 4 import java.util.ArrayList;
 5 
 6 /****
 7  * 文件搜索
 8  * @author wangr
 9  * date 2016-6-13
10  *
11  */
12 public class SearchFile
13 {
14     /**
15      * 文件列表
16      */
17     private static ArrayList<String> lstFile = new ArrayList<String>();                                                                     
18     /***
19      * 获取文件
20      * 
21      * @param Path 要搜索的目录
22      * @param Extension 扩展名
23      *
24      */
25     public static ArrayList<String> GetFiles(String Path, String Extension)        
26     {
27         File[] files = new File(Path).listFiles();
28         if (files == null)
29             return lstFile;
30         for (int i = 0; i < files.length; i++)
31         {
32             File f = files[i];
33             if (f.isFile())
34             {
35                 System.out.println("文件:" + f.getPath());
36                 if (f.getPath()
37                         .substring(f.getPath().length() - Extension.length())
38                         .equals(Extension)) // 判断扩展名
39                     lstFile.add(f.getPath());
40 
41             } else if (f.isDirectory() && f.getPath().indexOf("/.") == -1) // 忽略点文件(隐藏文件/文件夹)
42                 GetFiles(f.getPath(), Extension);
43         }
44         
45         return lstFile;
46     }
47 
48 }

音乐回调接口 用于显示当前播放歌曲

 1 package com.weizhi.common;
 2 
 3 /***
 4  * 音乐回调接口
 5  * @author wangr
 6  * date 2016-6-13
 7  *
 8  */
 9 public interface MusicCallBack
10 {
11    void  currentPlayer(String str);
12    
13 }

 

以上是关于Android 音乐播放的主要内容,如果未能解决你的问题,请参考以下文章

Android:更换片段时如何停止音乐?

音乐播放制作(html css js)

Android - 通过 FragmentManager 替换片段后,片段返回到它们的第一个状态

Android 音乐播放

Audio Ducking 后音乐更柔和?

Android应用开发--MP3音乐播放器代码实现