Android 下简单的 MP3 播放(代码分析)

本代码为教学材料,仅作学习使用,分析在注释里。
采用读取 SD 或者其他路径下的方式播放音乐文件。

AndoirdManifest.xml 配置文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.examplemp3">
// 获取读写内部存储器的权限
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

MP3Player.java

package com.example.player;

import android.content.Context;
import android.media.MediaPlayer;
import android.os.Environment;
import android.widget.Toast;

import com.example.examplemp3.MainActivity;

import java.io.IOException;

public class MP3Player {

    private MediaPlayer mp;
    private String path;
    private int length;



    public MP3Player(Context ctx) {
        mp = new MediaPlayer();
        // 获取内部存储器绝对路径
        path = Environment.getExternalStorageDirectory().getAbsolutePath();
        Toast.makeText(ctx, path, Toast.LENGTH_LONG).show();
    }

    public int getPosition() {
    // 获取当前位置
        return mp.getCurrentPosition();
    }

    public int getLength() {
        return length;
    }

    public void init(String fileName) {
        path = path + "/" + fileName;
        try {
        // 存储在SD卡或其他文件路径下的媒体文件
            mp.setDataSource(path);
            // 音乐文件准备
            mp.prepare();
            // 音乐文件长度
            length = mp.getDuration();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void play() {
        mp.start();
    }

    public void pause() {
        mp.pause();
    }

    public void stop() {
        mp.stop();
    }

    public void destroy() {
        mp.release();
    }

}

MainActivity.java

package com.example.examplemp3;

import android.annotation.TargetApi;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;

import com.example.player.MP3Player;

import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends AppCompatActivity {

    private Button btnPlay;
    private Button btnPause;
    private Button btnStop;

    private SeekBar sk;

    private MP3Player mp3Player;

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

        String[] permission = {"android.permission.READ_EXTERNAL_STORAGE"};
        // 获取动态权限
        this.requestPermissions(permission, 0);

        mp3Player = new MP3Player(MainActivity.this);
        mp3Player.init("exodus.mp3");

        btnPlay = (Button)findViewById(R.id.button);
        btnPause = (Button)findViewById(R.id.button2);
        btnStop = (Button)findViewById(R.id.button3);
        sk = (SeekBar)findViewById(R.id.seekBar);
        // 设置播放条最大长度
        sk.setMax(mp3Player.getLength());

        btnPlay.setOnClickListener(playerOnClickListener);
        btnPause.setOnClickListener(playerOnClickListener);
        btnStop.setOnClickListener(playerOnClickListener);

// 计时器
        Timer timer = new Timer();
        TimerTask timerTask = new TimerTask() {
            @Override
            public void run() {
            // 设置当前播放条位置
                sk.setProgress(mp3Player.getPosition());
            }
        };
        timer.schedule(timerTask, 0 , 10);
    }

    public View.OnClickListener playerOnClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            switch (view.getId()) {
                default:
                    break;
                case R.id.button:
                    mp3Player.play();
                    break;
                case R.id.button2:
                    mp3Player.pause();
                    break;
                case R.id.button3:
                    mp3Player.stop();
                    break;
            }
        }
    };
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值