【问题标题】:Seekbar for mp3 from sd card从 sd 卡搜索 mp3
【发布时间】:2015-04-08 17:06:55
【问题描述】:

这段代码是从原始文件夹中读取一个 mp3,但我想将我的 mp3 文件更改为 sd 卡中的另一个文件

它的新代码,音乐播放,但搜索栏无法正常工作,当我触摸它时,搜索栏回到第一个位置

public class MainActivity extends Activity implements OnClickListener {

SeekBar seek_bar;
Button play_button, pause_button;
MediaPlayer mediaPlayer;
TextView text_shown;
Handler seekHandler = new Handler();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    getInit();
    seekUpdation();
}


public void getInit() {  
    seek_bar = (SeekBar) findViewById(R.id.seek_bar);
    play_button = (Button) findViewById(R.id.play_button);
    pause_button = (Button) findViewById(R.id.pause_button);
    text_shown = (TextView) findViewById(R.id.text_shown);
    play_button.setOnClickListener(this);
    pause_button.setOnClickListener(this);
    String filePath = Environment.getExternalStorageDirectory() + "/Android/music.mp3";
    mediaPlayer = new MediaPlayer();
    try {
        mediaPlayer.setDataSource(filePath);
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SecurityException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mediaPlayer) {

        }
    });
    mediaPlayer.prepareAsync();
    seek_bar.setMax(mediaPlayer.getDuration());
}

Runnable run = new Runnable() {

    @Override
    public void run() {
        seekUpdation();
    }
};

public void seekUpdation() {

    seek_bar.setProgress(mediaPlayer.getCurrentPosition());
    seekHandler.postDelayed(run, 1000);
    seek_bar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

        @Override
        public void onStopTrackingTouch(SeekBar seek_bar) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onStartTrackingTouch(SeekBar seek_bar) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onProgressChanged(SeekBar seek_bar, int progress, boolean fromUser) {
            if(fromUser){ 
                mediaPlayer.seekTo(progress); 
                seek_bar.setProgress(progress);
            }

        }
    });
}

@Override
public void onClick(View view) {
    switch (view.getId()) {
    case R.id.play_button:
        text_shown.setText("Playing...");
        mediaPlayer.start();
        break;
    case R.id.pause_button:
        mediaPlayer.pause();
        text_shown.setText("Paused...");
    }
}

public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
    if(fromUser){ 
        mediaPlayer.seekTo(progress); 
        seekBar.setProgress(progress);
    }
}


@Override
public void onBackPressed() {
    mediaPlayer.stop();
    finish();
}

}

【问题讨论】:

    标签: android mp3 media-player sd-card seekbar


    【解决方案1】:

    移动这条线

    seek_bar.setMax(mediaPlayer.getDuration());
    

    seekUpdation()之后

    seekHandler.postDelayed(run, 1000);
    

    【讨论】:

      【解决方案2】:

      替换

      mediaPlayer = MediaPlayer.create(this, R.raw.my_file);
      

      与:

      String filePath = Environment.getExternalStorageDirectory() + "/randomDirectory/yourFile.mp3";
      mediaPlayer = new MediaPlayer();
      mediaPlayer.setDataSource(filePath);
      mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
          @Override
          public void onPrepared(MediaPlayer mp) {
              mediaPlayer.start();
          }
      });
      mediaPlayer.prepareAsync();
      

      【讨论】:

      • 先生。 Daniel Zolnai 我得到了你的回答这个错误 04-08 22:30:10.260: E/MediaPlayer(17087): start called in state 0 04-08 22:30:10.260: E/MediaPlayer(17087): error (-38, 0) 4-08 22:30:10.340: E/MediaPlayer(17087): Error (-38,0)
      • 那是因为您试图在 MediaPlayer 加载数据源之前启动它。在我的答案中查看我的编辑如何解决它。
      • 谢谢伙计,我用问题中的新代码更改了我的代码,请查看我的编辑,但搜索栏无法正常工作。当我触摸它时,搜索栏回到第一个并从第一个开始播放音乐
      • 你应该在 onStopTrackingTouch() 中使用 mediaPlayer.seekTo(progress)。
      • 您可能使用了之前未声明的变量。不过,这不在当前问题的范围内。如果它仍然不起作用,请打开另一个带有其他错误的问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-09
      相关资源
      最近更新 更多