zoukankan      html  css  js  c++  java
  • Android实现本地音频播放(可拖动条)

    这一期是实现本地播放,也可以播放网络资源的音乐(会在后期放上)

    先给大家放一个简略图(仅用于实现该功能,不美观)

    点击开始播放,拖动条跟着动,点击暂停时,音乐停止,拖动条停止。也可以手动拖动他,拖动到哪,就播放哪。

    下面上代码:

    首先是页面布局文件:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context=".MaikefengActivity">
    
    
        <SeekBar
            android:id="@+id/seekBar"
            android:layout_marginTop="40dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    
        <Button
            android:id="@+id/start_music"
            android:layout_marginTop="40dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="开始播放"
            android:textSize="16sp"
            />
    
        <Button
            android:id="@+id/pause_music"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="暂停播放"
            android:textSize="16sp"
            />
        <Button
            android:id="@+id/restart_music"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="继续播放"
            android:textSize="16sp"
            />
    
    
    </LinearLayout>

    对应的java文件:

    package com.example.logintest;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.media.MediaPlayer;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.SeekBar;
    
    import java.io.IOException;
    import java.util.Timer;
    import java.util.TimerTask;
    
    
    public class MaikefengActivity extends AppCompatActivity {
    
        private Button startmusic,pausemusic,restartmusic;
        private MediaPlayer mediaPlayer;
        private SeekBar seekBar;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_maikefeng);
    
            initView();
    
            //开始播放
            startmusic.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //1.初始化midiaplayer
                    mediaPlayer = new MediaPlayer();
                    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(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mediaPlayer.pause();
                }
            });
    
            //继续播放
            restartmusic.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mediaPlayer.start();
                }
            });
    
            //给seekBar设置监听事件
            setSeekBarChange();
    
        }
    
        private void setSeekBarChange() {
    
            seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                //当进度改变
                @Override
                public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    
                }
                //当开始拖动
                @Override
                public void onStartTrackingTouch(SeekBar seekBar) {
    
                }
                //当拖动停止的时候调用
                @Override
                public void onStopTrackingTouch(SeekBar seekBar) {
                    seekTo(seekBar.getProgress());
                }
            });
        }
    
        //实现指定播放的位置
        public void seekTo(int position){
            mediaPlayer.seekTo(position);
        }
    
        private void updateSeekBar() {
    
            //1.获取当前播放的总长度
            final int duration = mediaPlayer.getDuration();
            //2.使用Timer 定时器 去定时获取当前进度
            final Timer timer = new Timer();
            final TimerTask task = new TimerTask() {
                @Override
                public void run() {
                    //3.一秒获取一次当前进度
                    int currentPosition = mediaPlayer.getCurrentPosition();
    
                    // 设置seekBar进度
                    seekBar.setMax(duration);
                    //当前进度
                    seekBar.setProgress(currentPosition);
                }
            };
            //100毫秒后 每隔1秒 执行一次run方法
            timer.schedule(task,100,1000);
    
            //当歌曲执行完毕时,把timer 和 timertask 取消
            //设置播放完成的监听
            mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    timer.cancel();
                    task.cancel();
                }
            });
        }
    
        private void initView() {
            startmusic=findViewById(R.id.start_music);
            pausemusic=findViewById(R.id.pause_music);
            restartmusic=findViewById(R.id.restart_music);
            seekBar=findViewById(R.id.seekBar);
        }
    
    }

    其中的音频是播放的本地音乐,路径就是本地mp3文件的路径

  • 相关阅读:
    delphi参数传递
    Delphi OO
    Delphi Excel
    Delphi Register
    西安前端交流会
    web前端开发教程系列-4
    web前端开发教程系列-3
    web前端开发教程系列-2
    web前端开发教程系列-1
    露个脸
  • 原文地址:https://www.cnblogs.com/022414ls/p/13040573.html
Copyright © 2011-2022 走看看