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文件的路徑

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM