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());
                //松开之后音乐跳转到相应位置
            }
        });
    }

好了,记录到这里。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值