android seekto实现_Android实现本地音频播放(可拖动条)

本文介绍如何在Android应用中实现本地音频播放,并添加可拖动的进度条控制。通过MediaPlayer类初始化、设置播放资源、准备和开始播放音频。同时,使用SeekBar监听事件来控制播放进度,实现音频的拖动播放功能。
摘要由CSDN通过智能技术生成

packagecom.example.logintest;importandroidx.appcompat.app.AppCompatActivity;importandroid.media.MediaPlayer;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.Button;importandroid.widget.SeekBar;importjava.io.IOException;importjava.util.Timer;importjava.util.TimerTask;public class MaikefengActivity extendsAppCompatActivity {privateButton startmusic,pausemusic,restartmusic;privateMediaPlayer mediaPlayer;privateSeekBar seekBar;

@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

setContentView(R.layout.activity_maikefeng);

initView();//开始播放

startmusic.setOnClickListener(newView.OnClickListener() {

@Overridepublic voidonClick(View v) {//1.初始化midiaplayer

mediaPlayer = newMediaPlayer();try{

mediaPlayer.reset();//2.设置要播放的资源位置 path 可以是网络路径 也可以是本地路径

mediaPlayer.setDataSource("/mnt/sdcard/Music/iPhone.mp3");//3.准备播放

mediaPlayer.prepare();//4.开始播放

mediaPlayer.start();//5.更新进度条

updateSeekBar();

}catch(IOException e) {

e.printStackTrace();

}

}

});//暂停播放

pausemusic.setOnClickListener(newView.OnClickListener() {

@Overridepublic voidonClick(View v) {

mediaPlayer.pause();

}

});//继续播放

restartmusic.setOnClickListener(newView.OnClickListener() {

@Overridepublic voidonClick(View v) {

mediaPlayer.start();

}

});//给seekBar设置监听事件

setSeekBarChange();

}private voidsetSeekBarChange() {

seekBar.setOnSeekBarChangeListener(newSeekBar.OnSeekBarChangeListener() {//当进度改变

@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, booleanfromUser) {

}//当开始拖动

@Overridepublic voidonStartTrackingTouch(SeekBar seekBar) {

}//当拖动停止的时候调用

@Overridepublic voidonStopTrackingTouch(SeekBar seekBar) {

seekTo(seekBar.getProgress());

}

});

}//实现指定播放的位置

public void seekTo(intposition){

mediaPlayer.seekTo(position);

}private voidupdateSeekBar() {//1.获取当前播放的总长度

final int duration =mediaPlayer.getDuration();//2.使用Timer 定时器 去定时获取当前进度

final Timer timer = newTimer();final TimerTask task = newTimerTask() {

@Overridepublic voidrun() {//3.一秒获取一次当前进度

int currentPosition =mediaPlayer.getCurrentPosition();//设置seekBar进度

seekBar.setMax(duration);//当前进度

seekBar.setProgress(currentPosition);

}

};//100毫秒后 每隔1秒 执行一次run方法

timer.schedule(task,100,1000);//当歌曲执行完毕时,把timer 和 timertask 取消//设置播放完成的监听

mediaPlayer.setOnCompletionListener(newMediaPlayer.OnCompletionListener() {

@Overridepublic voidonCompletion(MediaPlayer mp) {

timer.cancel();

task.cancel();

}

});

}private voidinitView() {

startmusic=findViewById(R.id.start_music);

pausemusic=findViewById(R.id.pause_music);

restartmusic=findViewById(R.id.restart_music);

seekBar=findViewById(R.id.seekBar);

}

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值