android将搜索栏设置为初始并切换播放按钮以在音乐结束时暂停

时间:2017-10-15 13:47:35

标签: android android-mediaplayer android-seekbar

enter image description here 我正在设计一个从头开始的媒体播放器,所以我陷入困境的是当歌曲播放完毕后我想将搜索栏设置为初始值 我知道这可以用

完成
  

seekBar.setProgress(0)   但这对我不起作用,我希望播放按钮切换回暂停按钮,如果用户再次播放歌曲,则歌曲将正常播放   这是我的媒体播放器代码,希望你告诉我逻辑是什么以及如何放置它

public class MusicPlayerActivity extends AppCompatActivity implements Runnable,
        SeekBar.OnSeekBarChangeListener {
ImageView playpause;
SeekBar seekBar;
MediaPlayer mp = null;
int len = 0;
boolean isPlaying = false;


public MusicPlayerActivity() throws IOException {
}


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_music_player);
    String url = getIntent().getExtras().getString("musicurl");
    playpause = (ImageView)findViewById(R.id.imageView);
    seekBar = (SeekBar)findViewById(R.id.seekBar);
    playpause.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            if(!isPlaying){
                playpause.setImageResource(R.drawable.pause);
                mp.pause();
                len = mp.getCurrentPosition();
                seekBar.setEnabled(false);


            }else{
                playpause.setImageResource(R.drawable.play);
                mp.seekTo(len);
                mp.start();
                seekBar.setEnabled(true);

            }
            isPlaying = !isPlaying;



        }
    });

    mp = new MediaPlayer();
    try {
        mp.setDataSource(url);
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        mp.prepare();
    } catch (IOException e) {
        e.printStackTrace();
    }
    //if(mp.isPlaying()) mp.stop(); mp.release();
    mp.start();
    seekBar.setMax(mp.getDuration());
    new Thread(this).start();
   // Toast.makeText(this, mp.getDuration(), Toast.LENGTH_SHORT).show();


}

//if(mp.isPlaying()){}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
                              boolean fromUser) {
    try {
        if (mp.isPlaying() || mp != null) {
            if (fromUser)
                mp.seekTo(progress);
        } else if (mp == null) {
            Toast.makeText(getApplicationContext(), "Media is not running",
                    Toast.LENGTH_SHORT).show();
            seekBar.setProgress(0);
        }
    } catch (Exception e) {
        Log.e("seek bar", "" + e);
        seekBar.setEnabled(false);

    }
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {

}

@Override
public void onStopTrackingTouch(SeekBar seekBar) {

}

public void run() {
    int currentPosition = mp.getCurrentPosition();
    int total = mp.getDuration();

    while (mp != null && currentPosition < total) {
        try {
            Thread.sleep(1000);
            currentPosition = mp.getCurrentPosition();
        } catch (InterruptedException e) {
            return;
        } catch (Exception e) {
            return;
        }
        seekBar.setProgress(currentPosition);
    }
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            mp.stop();
            startActivity(new Intent(this,MainActivity.class));
            break;
    }
    return true;
}
@Override
public void onBackPressed() {
    Intent mainActivity = new Intent(Intent.ACTION_MAIN);
    mainActivity.addCategory(Intent.CATEGORY_HOME);
    mainActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(mainActivity);
}

}

2 个答案:

答案 0 :(得分:0)

seekbar.setOnSeekBarChangeListener(this);中添加onCreate,否则不会调用onProgressChanged()

要重置进度条,请查看以下方法:

在媒体播放器实例上设置OnCompletionListener。媒体文件完成播放后,您可以在OnCompletion(MediaPlayer mp)回调函数中执行所需的操作。

mp.start()之前添加以下代码段应该适合您。

mp.setOnCompletionListener(new OnCompletionListener() {

            @Override
            public void onCompletion(MediaPlayer mp) {
                seekBar.setProgress(0); // sets seekbar to initial position.
                toggleViews();//implement this function to toggle your play/pause button

            }

        });

答案 1 :(得分:0)

您没有设置监听器:seekbar.setOnSeekBarChangeListener(this)