android 播放assets目录内的音乐,及使用Seekbar控制播放进度

布局文件

                   android:id="@+id/view_music_seek"
            android:layout_width="0dp"
            android:layout_height="30dp"
            android:layout_weight="1" />

java文件

      (1)遍历出所有音乐资源

                 public static String[] getAssetsFiles(Activity activity, String assetsName) {
                      String[] subFile = null;
                      try {
                           subFile = activity.getAssets().list(assetsName);
                      } catch (IOException e) {
                           e.printStackTrace();
                           Mxg.d(TAG, e.getMessage());
                     }
                     return subFile;
                  }

       (2)初始化音乐播放及控制音乐暂停等操作

                 musicArr = getAssetsFiles();

                 mediaPlayer = new MediaPlayer();

                 播放

                 mediaPlayer.reset();

                 AssetFileDescriptor afd = activity.getAssets().openFd(assetsName+ "/" + musicArr[playIndex]);
                mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
                mediaPlayer.prepare();
                mediaPlayer.start();

                暂停

                mediaPlayer.pause();

                停止

                 mediaPlayer.stop();

         (3)播放时更新进度条进度
                 progressTask.postDelayed(progressRun, 500);
                 private Handler progressTask = new Handler();
                 private Runnable progressRun = new Runnable() {
                      @Override
                      public void run() {
                          if (isPlay) {
                               int current = mediaPlayer.getCurrentPosition();
                               sbMusic.setProgress(current);
                               tvTime.setText(Utils.secondToDateStr(current / 1000));
                               progressTask.postDelayed(this, 500);
                      }
                  }
              };

        (4)滑动进度条控制音乐进度           

                    sbMusic.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                                //是否触碰修改音乐进度,如果不加这个判断,音乐会卡顿
                                private boolean isTouchChange = false;

                                @Override
                                public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                                    //判断是否播放中及是否是手指拖动
                                    //如果不适用istouchchange 音乐会卡顿 因为播放的时候进度条也会动
                                    if (isPlay && isTouchChange) {
                                        mediaPlayer.seekTo(progress);
                                    }
                                }

                                @Override
                                public void onStartTrackingTouch(SeekBar seekBar) {
                                    isTouchChange = true;
                                }

                                @Override
                                public void onStopTrackingTouch(SeekBar seekBar) {
                                    isTouchChange = false;
                                }
                            });

你可能感兴趣的:(Java,android,android,studio)