Android开发在线音频播放器:第三章核心PlayerService详解

作者:袖梨 2026-05-27
本文将深入解析Android音频播放器Service的核心实现,重点探讨播放控制、状态管理和数据交互等关键环节,帮助开发者理解在线音频播放的后台运行机制。 播放服务的基础权限配置 1、服务核心变量定义 private static AudioPlayerManager apm; //音频播放管理 private static int mPosSomeTime = 0;// 播放指针 单元 private String jsonList, unit_name; //歌曲列表数据 歌曲名称 private static int bookId; //内层专辑ID private static String book_name; //内层专辑ID private static long process = 0; //当前歌曲播放进度 private static long max = 0; //当前歌曲最大进度 private static ExecutorService fixedThreadPool; private static int isFrom; //来源 0 专辑列表 1首页 2 AI问答 private String book_cover; //专辑封面 private static int bizId; //外层专辑ID private static String bizTopic; //外层专辑主题 private static long timeStart = 0; //开始计时的时间戳 private static boolean countDowning = false; //是否倒计时中 2、服务初始化流程 @Override public void onCreate() { super.onCreate(); EventBus.getDefault().register(this); fixedThreadPool = Executors.newFixedThreadPool(3); apm = AudioPlayerManager.getInstance(TbjcPlayerService.this); Player.Listener listener = new Player.Listener() { @Override public void onPlayerStateChanged(boolean playWhenReady, int playbackState) { switch (playbackState) { case Player.STATE_BUFFERING://加载缓存且还未准备好时触发 break; case Player.STATE_READY: //播放准备 timeStart = System.currentTimeMillis(); //记录播放开始时间 break; case Player.STATE_ENDED: //播放结束时触发 process=0; fixedThreadPool.execute(command4); //保存播放进度 int sum = 0; sum = ConstantFd.unit_List.size(); //专辑中的歌曲数量 if(ConstantFd.loop_type == 2 && sum > 0){ //随机播放 int index = (int) (Math. random() * sum-1); to_play(index); }else if(ConstantFd.loop_type == 0){ //顺序播放 Log.e("TAG", "mPosSomeTime---> "+mPosSomeTime); if(mPosSomeTime < sum - 1){//播放指针 小于 列表总数 play_next(1); //播放下一个 }else { //已播完最后一首 暂停操作 ConstantFd.isplay = false; apm.playOrPause(false); PlayStateMsg.sendState(false); //发送播放状态 通知ui } }else if(ConstantFd.loop_type == 1){ //

相关文章

精彩推荐