音樂(部分)

PlayerServicejava

package com.anhui.music_player.util;
import java.util.List; 
import com.anhui.music_player.model.Music;
import android.app.Service;  
import android.content.BroadcastReceiver;  
import android.content.Context;  
import android.content.Intent;  
import android.content.IntentFilter;  
import android.media.MediaPlayer;  
import android.media.MediaPlayer.OnCompletionListener;  
import android.media.MediaPlayer.OnPreparedListener;  
import android.os.Handler;  
import android.os.IBinder;  
import android.util.Log;
public class PlayerService extends Service {  
    private MediaPlayer mediaPlayer; // 媒體播放器對象  
    private String path;            // 音樂文件路徑  
    private boolean isPause;        // 暫停狀態  
    private int current = 0;        // 記錄當前正在播放的音樂  
    private List<Music> mp3Infos;   //存放Mp3Info對象的集合  
    private int status = 3;         //播放狀態,默認爲順序播放  
    private MyReceiver myReceiver;  //自定義廣播接收器  
    private int currentTime;        //當前播放進度  
    private int duration;           //播放長度  
      
    //服務要發送的一些Action  
    public static final String UPDATE_ACTION = "com.wwj.action.UPDATE_ACTION";  //更新動做  
    public static final String CTL_ACTION = "com.wwj.action.CTL_ACTION";        //控制動做  
    public static final String MUSIC_CURRENT = "com.wwj.action.MUSIC_CURRENT";  //當前音樂播放時間更新動做  
    public static final String MUSIC_DURATION = "com.wwj.action.MUSIC_DURATION";//新音樂長度更新動做  
      
    /** 
     * handler用來接收消息,來發送廣播更新播放時間 
     */  
    private Handler handler = new Handler() {  
        public void handleMessage(android.os.Message msg) {  
            if (msg.what == 1) {  
                if(mediaPlayer != null) {  
                    currentTime = mediaPlayer.getCurrentPosition(); // 獲取當前音樂播放的位置  
                    Intent intent = new Intent();  
                    intent.setAction(MUSIC_CURRENT);  
                    intent.putExtra("currentTime", currentTime);  
                    sendBroadcast(intent); // 給PlayerActivity發送廣播  
                    handler.sendEmptyMessageDelayed(1, 1000);  
                }  
                  
            }  
        };  
    };  
  
    @Override  
    public void onCreate() {  
        super.onCreate();  
        Log.d("service", "service created");  
        mediaPlayer = new MediaPlayer();  
        mp3Infos =MusicList.getMusicData(this); 
          
  
        /** 
         * 設置音樂播放完成時的監聽器 
         */  
        mediaPlayer.setOnCompletionListener(new OnCompletionListener() {  
  
            @Override  
            public void onCompletion(MediaPlayer mp1) {  
                if (status == 1) { // 單曲循環  
                    mediaPlayer.start();  
                } 
                else if (status == 2) { // 所有循環  
                    current++;  
                    if(current > mp3Infos.size() - 1) {  //變爲第一首的位置繼續播放  
                        current = 0;  
                    }  
              
                } else if (status == 3) { // 順序播放  
                    current++;  //下一首位置  
                    if (current <= mp3Infos.size() - 1) {  
                        Intent sendIntent = new Intent(UPDATE_ACTION);  
                        sendIntent.putExtra("current", current);  
                        // 發送廣播,將被Activity組件中的BroadcastReceiver接收到  
                        sendBroadcast(sendIntent);  
                        path = mp3Infos.get(current).getUrl();  
                        play(0);  
                    }else {  
                        mediaPlayer.seekTo(0);  
                        current = 0;  
                        Intent sendIntent = new Intent(UPDATE_ACTION);  
                        sendIntent.putExtra("current", current);  
                        // 發送廣播,將被Activity組件中的BroadcastReceiver接收到  
                        sendBroadcast(sendIntent);  
                    }  
                } else if(status == 4) {    //隨機播放  
                    current = getRandomIndex(mp3Infos.size() - 1);  
                    System.out.println("currentIndex ->" + current);  
                    Intent sendIntent = new Intent(UPDATE_ACTION);  
                    sendIntent.putExtra("current", current);  
                    // 發送廣播,將被Activity組件中的BroadcastReceiver接收到  
                    sendBroadcast(sendIntent);  
                    path = mp3Infos.get(current).getUrl();  
                    play(0);  
                }  
            }  
        });  
  
        myReceiver = new MyReceiver();  
        IntentFilter filter = new IntentFilter();
        registerReceiver(myReceiver, filter);  
    }  
  
    /** 
     * 獲取隨機位置 
     * @param end 
     * @return 
     */  
    protected int getRandomIndex(int end) {  
        int index = (int) (Math.random() * end);  
        return index;  
    }  
  
    @Override  
    public IBinder onBind(Intent arg0) {  
        return null;  
    }  
  
 
    /** 
     * 播放音樂 
     *  
     * @param position 
     */  
    private void play(int currentTime) {  
        try {  
            mediaPlayer.reset();// 把各項參數恢復到初始狀態  
            mediaPlayer.setDataSource(path);  
            mediaPlayer.prepare(); // 進行緩衝  
            mediaPlayer.setOnPreparedListener(new PreparedListener(currentTime));// 註冊一個監聽器  
            handler.sendEmptyMessage(1);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
  
    /** 
     * 暫停音樂 
     */  
    private void pause() {  
        if (mediaPlayer != null && mediaPlayer.isPlaying()) {  
            mediaPlayer.pause();  
            isPause = true;  
        }  
    }  
  
    private void resume() {  
        if (isPause) {  
            mediaPlayer.start();  
            isPause = false;  
        }  
    }  
  
    /** 
     * 上一首 
     */  
    private void previous() {  
        Intent sendIntent = new Intent(UPDATE_ACTION);  
        sendIntent.putExtra("current", current);  
        // 發送廣播,將被Activity組件中的BroadcastReceiver接收到  
        sendBroadcast(sendIntent);  
        play(0);  
    }  
  
    /** 
     * 下一首 
     */  
    private void next() {  
        Intent sendIntent = new Intent(UPDATE_ACTION);  
        sendIntent.putExtra("current", current);  
        // 發送廣播,將被Activity組件中的BroadcastReceiver接收到  
        sendBroadcast(sendIntent);  
        play(0);  
    }  
  
    /** 
     * 中止音樂 
     */  
    private void stop() {  
        if (mediaPlayer != null) {  
            mediaPlayer.stop();  
            try {  
                mediaPlayer.prepare(); // 在調用stop後若是須要再次經過start進行播放,須要以前調用prepare函數  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  
    }  
  
    @Override  
    public void onDestroy() {  
        if (mediaPlayer != null) {  
            mediaPlayer.stop();  
            mediaPlayer.release();  
            mediaPlayer = null;  
        }  
          
    }  
  
    /** 
     *  
     * 實現一個OnPrepareLister接口,當音樂準備好的時候開始播放 
     *  
     */  
    private final class PreparedListener implements OnPreparedListener {  
        private int currentTime;  
  
        public PreparedListener(int currentTime) {  
            this.currentTime = currentTime;  
        }  
  
        @Override  
        public void onPrepared(MediaPlayer mp) {  
            mediaPlayer.start(); // 開始播放  
            if (currentTime > 0) { // 若是音樂不是從頭播放  
                mediaPlayer.seekTo(currentTime);  
            }  
            Intent intent = new Intent();  
            intent.setAction(MUSIC_DURATION);  
            duration = mediaPlayer.getDuration();  
            intent.putExtra("duration", duration);  //經過Intent來傳遞歌曲的總長度  
            sendBroadcast(intent);  
        }  
    }  
  
    public class MyReceiver extends BroadcastReceiver {  
  
        @Override  
        public void onReceive(Context context, Intent intent) {  
            int control = intent.getIntExtra("control", -1);  
            switch (control) {  
            case 1:  
                status = 1; // 將播放狀態置爲1表示:單曲循環  
                break;  
            case 2:  
                status = 2; //將播放狀態置爲2表示:所有循環  
                break;  
            case 3:  
                status = 3; //將播放狀態置爲3表示:順序播放  
                break;  
            case 4:  
                status = 4; //將播放狀態置爲4表示:隨機播放  
                break;  
            }  
        }  
    }  
  
}

MusicList 獲取全部歌曲android

package com.anhui.music_player.util;


public class MusicList {
 public static List<Music> getMusicData(Context context) {
  List<Music> musicList = new ArrayList<Music>();
  ContentResolver cr = context.getContentResolver();
  if (cr != null) {
   // 獲取全部歌曲
   Cursor cursor = cr.query(
     MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null,
     null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
   if (null == cursor) {
    return null;
   }
   if (cursor.moveToFirst()) {
    do {
     Music m = new Music();
     String title = cursor.getString(cursor
       .getColumnIndex(MediaStore.Audio.Media.TITLE));
     String singer = cursor.getString(cursor
       .getColumnIndex(MediaStore.Audio.Media.ARTIST));
     if ("<unknown>".equals(singer)) {
      singer = "未知藝術家";
     }
     String album = cursor.getString(cursor
       .getColumnIndex(MediaStore.Audio.Media.ALBUM));
     long size = cursor.getLong(cursor
       .getColumnIndex(MediaStore.Audio.Media.SIZE));
     long time = cursor.getLong(cursor
       .getColumnIndex(MediaStore.Audio.Media.DURATION));
     String url = cursor.getString(cursor
       .getColumnIndex(MediaStore.Audio.Media.DATA));
     String name = cursor
       .getString(cursor
         .getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
     String sbr = name.substring(name.length() - 3,
       name.length());
     if (sbr.equals("mp3")) {
      m.setTitle(title);
      m.setSinger(singer);
      m.setAlbum(album);
      m.setSize(size);
      m.setTime(time);
      m.setUrl(url);
      m.setName(name);
      musicList.add(m);
     }
    } while (cursor.moveToNext());
   }
   if (cursor != null) {
    cursor.close();
   }
  }
  return musicList;
 }
}
相關文章
相關標籤/搜索