ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 低调看直播体育app软件下载 >> Android开发 >> android本地音乐播放(二)

android本地音乐播放(二)(7/8)

来源:网络整理     时间:2016-05-09     关键词:Android

本篇文章主要介绍了"android本地音乐播放(二)",主要涉及到Android方面的内容,对于Android开发感兴趣的同学可以参考一下: MainActivity 代码package cn.tedu.music_player_2.activity;import java.util.List;imp...

public class PlayMusicService extends Service {
/**
* 播放工具
*/
private MediaPlayer player;
/**
* 歌曲数据的List集合
*/
private List musics;
/**
* Application
*/
private MusicPlayerApplication app;
/**
* 当前播放的歌曲的索引
*/
private int currentMusicIndex;
/**
* 暂停位置
*/
private int pausePosition;

@Override
public void onCreate() {
    // 创建MediaPlayer
    player = new MediaPlayer();

    // 获取歌曲列表的数据
    app = (MusicPlayerApplication) getApplication();
    musics = app.getMusics();

    // 为MediaPlayer对象配置监听器
    player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            // 播放下一首
            next();
        }
    });
    player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
            // 快进到之前暂停的位置
            player.seekTo(pausePosition);
            // 播放
            player.start();
        }
    });
}

@Override
public IBinder onBind(Intent intent) {
    InnerBinder binder = new InnerBinder();
    return binder;
}

@Override
public void onDestroy() {
    // 释放播放器相关资源
    player.release();
    player = null;
}

/**
 * Binder
 */
private class InnerBinder extends Binder implements IMusicPlayer {

    @Override
    public void callPlay() {
        PlayMusicService.this.play();
    }

    @Override
    public void callPause() {
        PlayMusicService.this.pause();
    }

    @Override
    public void callPrevious() {
        PlayMusicService.this.previous();
    }

    @Override
    public void callNext() {
        PlayMusicService.this.next();
    }

    @Override
    public boolean callIsPlaying() {
        return player.isPlaying();
    }

    @Override
    public void callPlay(int position) {
        PlayMusicService.this.play(position);
    }

    @Override
    public int callGetCurrentMusicIndex() {
        return currentMusicIndex;
    }

    @Override
    public int callGetCurrentPosition() {
        return player.getCurrentPosition();
    }

    @Override
    public int callGetDuration() {
        return player.getDuration();
    }

    @Override
    public void callSeekTo(int progress) {
        PlayMusicService.this.seekTo(progress);
    }

}

/**
 * 播放
 */
private void play() {
    try {
        // 1. 重置
        player.reset();
        // 2. 设置歌曲的路径
        player.setDataSource(musics.get(currentMusicIndex).getPath());
        // 3. 异步加载歌曲数据,必须匹配OnPreparedListener
        player.prepareAsync();

// // 3. 加载歌曲数据
// player.prepare();
// // 4. 快进到暂停位置
// player.seekTo(pausePosition);
// // 5. 播放
// player.start();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

/**
 * 播放指定的歌曲
 * 
 * @param position
 *            歌曲的索引
 */
private void play(int position) {
    // 确定需要播放的歌曲的索引
    currentMusicIndex = position;
    // 清除暂停位置
    pausePosition = 0;
    // 播放
    play();
}

/**
 * 暂停
 */
private void pause() {
    // 暂停播放
    player.pause();
    // 记录当前播放到的位置
    pausePosition = player.getCurrentPosition();
}

/**
 * 播放上一首
 */
private void previous() {
    // 计算上一首歌曲的索引值
    currentMusicIndex--;
    if (currentMusicIndex < 0) {
        currentMusicIndex = musics.size() - 1;
    }
    // 清除暂停位置
    pausePosition = 0;
    // 播放
    play();
}

/**
 * 播放下一首
 */
private void next() {
    // 计算上一首歌曲的索引值
    currentMusicIndex++;
    if (currentMusicIndex >= musics.size()) {
        currentMusicIndex = 0;
    }
    // 清除暂停位置
    pausePosition = 0;
    // 播放
    play();
}

/**
 * 快进到指定的进度位置开始播放
 * 
 * @param progress
 *            进度值,假设从60%位置开始播放,则参数值为60
 */
private void seekTo(int progress) {
    // 根据进度计算出需要从??毫秒开始播放,并将值赋给pausePosition
    pausePosition = player.getDuration() * progress / 100;
    // 播放
    play();
}

}

commonutils 类代码:

package cn.tedu.music_player_2.util;

import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.Locale;
/**
* 通用工具类
*/
public class CommonUtils {
/**
* 格式化时间的工具
*/
private static SimpleDateFormat sdf = new SimpleDateFormat(“mm:ss”, Locale.CHINA);
/**
* 被格式化的时间对象
*/
private static Date date = new Date();

/**
 * 获取格式化后的时间
 * 
 * @param timeMillis
 *            时间值,取值为从1970-1-1 0:00:00至今的毫秒数
 * @return 格式化为mm:ss格式的字符串
 */
public static String getFormattedTime(long timeMillis) {
    // 设置时间
    date.setTime(timeMillis);
    // 返回格式化后的结果
    return sdf.format(date);
}

}

consts工具类

package cn.tedu.music_player_2.util;

/**
* 保存常量
* @author chengheng
* @version 2.0
*/
public interface Consts {
/**
* 指令:播放或暂停
*/
int COMMAND_PLAY_OR_PAUSE = 0;
/**
* 指令:播放上一首
*/
int COMMAND_PREVIOUS = 1;
/**
* 指令:播放下一首
*/
int COMMAND_NEXT = 2;
/**
* 指令:播放指定的歌曲
*/
int COMMAND_PLAY_POSITION = 3;

/**
 * Intent中封装的数据的key:指令
 */
String EXTRA_COMMAND = "command";
/**
* Intent中封装的数据的key:需要播放的歌曲的索引
*/
String EXTRA_POSITION = "position";

}

IMusicPlayer类代码:

package cn.tedu.music_player_2.util;

public interface IMusicPlayer {
/**
* 播放歌曲
*/
void callPlay();

相关图片

相关文章