android使用MediaPlayer播放音乐+进度条

这几天一直在学习android,向着把一些东西记下来,网络是最好的了。

mediaPlayer实现音频的播放

直接看这个图片可以比较的清晰知道应该怎么调用MediaPlayer的一些函数。

这个小实现是实现进度条跟踪的,进度条的跟踪我放在了一个子线程里面

代码:

 class progressThread extends Thread{
         boolean flag=true;

        @Override
        public void run() {
            super.run();
            while(flag){
                if(player.isPlaying()) {
                    progress.setProgress(player.getCurrentPosition()); //实时获取播放音乐的位置并且设置进度条的位置
                }
            }
        }
        //下面的函数是外部调用种植线程的,因为现在是不提倡直接带哦用stop方法的
        public void stopThread(){

            this.flag=false;
        }

    }

APP播放界面(只是实现了播放以及控制播放的功能,界面还有待优化)

 然后就是主程序中的一些代码设置了

一些代码

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_play);
        try {
            player.setDataSource(main.getAbsolutePath()+"/test.wav"); //获取到音频文件设置MediaPlayer的资源
            player.setLooping(false);  //只播放一次
            player.prepare();
            player.start();

        } catch (IOException e) {
            e.printStackTrace();
            Toast.makeText(this, "IO error", Toast.LENGTH_SHORT).show();
        }
        //MediaPlayer准备资源的监听器
        player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mediaPlayer) {
                Log.e("TAG", "preparing");
            }
        });
        //音频播放完成的监听器
        player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mediaPlayer) {
                Log.e("TAG", "completed!");
                //把所有的都回归到0
                progress.setProgress(0);
                player.seekTo(0);
                play_button.setSelected(player.isPlaying());
            }
        });
        //初始化进度条
        initProgress();
        //I am thinking about use a thread to listen to the progress of the music
        //开启进度条跟踪线程
        progressThread= new progressThread();
        progressThread.start();

        //这个是播放和暂停的图标
        play_button=findViewById(R.id.start_stop);
        //根据当前音乐的播放情况设置这个图标是暂停还是播放中
        play_button.setSelected(player.isPlaying());
        play_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //控制音频的播放和暂停
                if(player.isPlaying()){
                    player.pause();
                }else{
                    player.start();
                }
                play_button.setSelected(player.isPlaying());
            }
        });







 private void initProgress() {
        progress  =findViewById(R.id.progress_bar);
        //根据音乐的时长设置进度条的最大进度
        progress.setMax(player.getDuration());
        progress.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {

            }
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                player.seekTo(seekBar.getProgress());
                //松开之后音乐跳转到相应位置
            }
        });
    }

好了,记录到这里。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现 Android 音乐播放进度条对映 MP3 播放进度,可以通过以下步骤来操作: 1. 首先需要获取 MP3 文件的总时长,可以使用 MediaPlayer 类的 getDuration() 方法来获取。 2. 然后在播放器开始播放 MP3 文件时,可以使用 Handler 和 Runnable 来定时更新进度条的进度。具体实现可以参考以下代码: ```java final Handler mHandler = new Handler(); Runnable mRunnable = new Runnable() { @Override public void run() { int currentPosition = mediaPlayer.getCurrentPosition(); int totalDuration = mediaPlayer.getDuration(); // 更新进度条的进度 progressBar.setProgress(currentPosition); // 更新播放时间的显示 String currentTime = formatTime(currentPosition); String totalTime = formatTime(totalDuration); tvCurrentTime.setText(currentTime); tvTotalTime.setText(totalTime); // 每隔一秒钟更新一次 mHandler.postDelayed(this, 1000); } }; // 开始播放 MP3 文件 mediaPlayer.start(); // 开始更新进度条的进度 mHandler.postDelayed(mRunnable, 1000); ``` 其中,formatTime() 方法可以将毫秒数转换为格式化后的时间字符串,例如 "00:03:45"。 3. 在用户拖动进度条时,可以使用 SeekBar 的 OnSeekBarChangeListener 接口来监听进度条的变化,并调用 MediaPlayer 的 seekTo() 方法来改变播放进度。具体实现可以参考以下代码: ```java progressBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (fromUser) { // 用户拖动进度条时,改变播放进度 mediaPlayer.seekTo(progress); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { // 用户开始拖动进度条时,停止更新进度条的进度 mHandler.removeCallbacks(mRunnable); } @Override public void onStopTrackingTouch(SeekBar seekBar) { // 用户停止拖动进度条时,重新开始更新进度条的进度 mHandler.postDelayed(mRunnable, 1000); } }); ``` 通过以上步骤,就可以实现 Android 音乐播放进度条对映 MP3 播放进度的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值