iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0

DAY28 Android 開發之 MediaPlayer 的應用

在 Android 應用開發中,播放音訊是一項常見的需求。Android 平台提供了 MediaPlayer 這個強大的 API 來處理音訊與視訊播放。在今天的文章中,我們將介紹如何使用 MediaPlayer 來實現基本的音訊播放功能,並探討它的主要方法和使用技巧。

一、什麼是 MediaPlayer?

MediaPlayer 是 Android 提供的一個多媒體播放類別,能夠播放來自應用資源、檔案系統、網路或其他 URI 的音訊和視訊檔案。它不僅能處理基本的播放控制,還提供了許多便利的回調方法來處理異常和準備事件。

二、使用 MediaPlayer 的步驟

  1. 初始化 MediaPlayer:透過 MediaPlayer.create() 或使用 setDataSource() 方法來指定音訊檔案來源。
  2. 準備播放:可以選擇同步或異步方式準備播放內容。通常使用 prepare() 或 prepareAsync() 方法。
  3. 控制播放:通過 start()、pause()、stop() 來控制音訊播放過程。
  4. 釋放資源:播放完成後,記得使用 release() 來釋放資源,避免內存洩漏。

三、範例程式碼

首先你需要先:

  1. 準備音檔:首先,你需要一個 .mp3 或 .wav 格式的音訊檔。你可以用任何音訊檔案(例如 5-10 秒的音樂片段)作為範例。

  2. 將音檔加入專案:
    將你的音檔命名為 sample_audio.mp3 或 sample_audio.wav。
    將音檔複製到 Android 專案的 res/raw/ 資料夾下。如果 raw 資料夾不存在,你可以自己建立它。
    路徑應該是:app/src/main/res/raw/sample_audio.mp3
    以下是一個簡單的 MediaPlayer 應用範例。

1. Java 程式碼

package com.example.mediaplayerdemo;

import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    private MediaPlayer mediaPlayer;
    private Button btnPlay, btnPause, btnStop;
    private TextView tvStatus;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnPlay = findViewById(R.id.btnPlay);
        btnPause = findViewById(R.id.btnPause);
        btnStop = findViewById(R.id.btnStop);
        tvStatus = findViewById(R.id.tvStatus);

        // 初始化 MediaPlayer,播放來自 res/raw 的音訊檔案
        mediaPlayer = MediaPlayer.create(this, R.raw.sample_audio);

        btnPlay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!mediaPlayer.isPlaying()) {
                    mediaPlayer.start(); // 播放音訊
                    tvStatus.setText("播放狀態:播放中...");
                }
            }
        });

        btnPause.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mediaPlayer.isPlaying()) {
                    mediaPlayer.pause(); // 暫停音訊
                    tvStatus.setText("播放狀態:已暫停");
                }
            }
        });

        btnStop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mediaPlayer.isPlaying()) {
                    mediaPlayer.stop(); // 停止音訊
                    tvStatus.setText("播放狀態:已停止");

                    // 必須重新準備 MediaPlayer 才能再次播放
                    mediaPlayer = MediaPlayer.create(MainActivity.this, R.raw.sample_audio);
                }
            }
        });
    }
}

2. XML 佈局檔案 (activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <!-- 播放按鈕 -->
    <Button
        android:id="@+id/btnPlay"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="播放音訊"
        android:layout_marginTop="20dp" />

    <!-- 暫停按鈕 -->
    <Button
        android:id="@+id/btnPause"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="暫停音訊"
        android:layout_marginTop="20dp" />

    <!-- 停止按鈕 -->
    <Button
        android:id="@+id/btnStop"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="停止音訊"
        android:layout_marginTop="20dp" />

    <!-- 狀態顯示 -->
    <TextView
        android:id="@+id/tvStatus"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="播放狀態:未播放"
        android:layout_marginTop="30dp"
        android:textSize="18sp"
        android:textColor="#000000" />
</LinearLayout>

四、注意事項

  1. 音訊資源準備:MediaPlayer 提供了同步與異步的準備方式,當音訊來源是網路或大檔案時,建議使用 prepareAsync() 來避免主執行緒的卡頓。
  2. 資源管理:務必在播放完成或退出 Activity 時釋放 MediaPlayer 資源,避免內存洩漏。
  3. 權限:如果播放的是來自外部的音訊檔案,記得申請必要的存取權限。

五、結論

MediaPlayer 是一個功能強大的工具,能夠簡單地整合至 Android 應用中,用來播放音訊和視訊檔案。在實際應用中,我們可以擴展這個基礎範例,加入更多的功能,例如進度條控制、音量調整、背景播放等。希望這篇文章能夠幫助你快速上手 MediaPlayer 並實現基本的音訊播放功能。


上一篇
# DAY27 輕鬆保存應用設定——SharedPreferences
下一篇
# DAY29 RxJava 與 Retrofit 結合:打造高效的 Android 應用
系列文
「淺入 Android Studio 開發環境」—— 工具與插件的高效使用29
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言