最近在做一个音乐播放器,遇到了一些难题,所以深深的感觉到了自己的不足。所以呢,准备把自己一段时间的学习做个有条理的笔记,为自己打基础,也是为大家做贡献。
今天,我通过网上其他博主的博客,了解到了他们的笔记,也是一字一句的实现出来了。好了,废话不多说,直接开始吧。
## 第一步 ##
新建Android项目
项目名:MediaPlayer
包名:com.MediaPlayer
在res文件夹下新建raw文件夹,里面放音乐文件

音乐文件名字只能由小写字母 横杠 还有数字组成。

android mediaplayer 中文 mediaplayer安卓版_xml


strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">MyMediaPlayer</string>
    <string name="hello">MyMedioPlayer!</string>
    <!-- button -->
    <string name="button_stop">停止</string>
    <string name="button_start">播放</string>
    <string name="button_loop">重复</string>
    <!-- menu -->
    <string name="menu_about">关于</string>
    <string name="menu_exit">退出</string>
    <string name="about_message">名称:音乐播放器/n  
                                   /n作者:TimeOver_Nice/n  
                                   /n邮箱:934249779@qq.com    </string>
    <string name="dialog_yes">确定</string>

</resources>

主要布局
activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

    <LinearLayout
        android:layout_width="match_parent"
        android:orientation="horizontal"
        android:layout_height="match_parent" >

        <Button
            style="@android:attr/buttonBarButtonStyle"
            android:id="@+id/button_start"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/button_start" />

        <Button
            style="@android:attr/buttonBarButtonStyle"
            android:id="@+id/button_stop"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/button_stop" />

        <Button
            style="@android:attr/buttonBarButtonStyle"
            android:id="@+id/button_loop"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/button_loop" />

    </LinearLayout>

</LinearLayout>

好了,布局和资源文件都写完了,现在可以实现功能了

MainActivity.java

package com.android.MyMediaPlayer;

import java.io.IOException;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MusicPlayer extends Activity {
    private MediaPlayer player;
    private Button button_start;// 开始 暂停按钮
    private Button button_stop;// 停止按钮
    private Button button_loop;// 重复按钮

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

    private void setListener() {
        button_start.setOnClickListener(buttonListener);
        button_stop.setOnClickListener(buttonListener);
        button_loop.setOnClickListener(buttonListener);
    }

    private OnClickListener buttonListener = new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            switch (v.getId()) {
            // 根据刚刚setid进行按钮操作
            case 0:
                player.start();
                // 根据点击按钮切换暂停继续
                if (button_start.getText() == "暂停") {
                    button_start.setText("播放");
                    player.pause();
                } else {
                    button_start.setText("暂停");
                }
                break;
            case 1:
                if (button_start.getText() == "暂停") {
                    button_start.setText("播放");
                    player.pause();
                }
                player.stop();
                try {
                    // 必须调用prepare方法,不如停止之后不能再播放
                    player.prepare();
                } catch (IllegalStateException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                break;
            case 2:
                player.setLooping(true);
                // 按下按钮 文字切换
                if (button_loop.getText() == "取消重复") {
                    button_loop.setText("重复");
                    player.setLooping(false);
                } else {
                    button_loop.setText("取消重复");
                }
                if (player.isLooping()) {
                    Toast.makeText(MusicPlayer.this, "重复已开启",
                            Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(MusicPlayer.this, "重复已关闭",
                            Toast.LENGTH_SHORT).show();
                }
                break;

            }

        }
    };

    private void findView() {
        // 给每个按钮setid是为了监听按钮时分辨按钮
        button_start = (Button) findViewById(R.id.button_start);
        button_start.setId(0);
        button_stop = (Button) findViewById(R.id.button_stop);
        button_stop.setId(1);
        button_loop = (Button) findViewById(R.id.button_loop);
        button_loop.setId(2);

    }

    private void init() {
        //如果把这里写成获取音乐路径并且加载 就很容易改造成本地播放器
        player = MediaPlayer.create(MusicPlayer.this, R.raw.example);
        /*
         * MediaPlayer有三个create方法 我这里用的是create(context context,uri uri)方法
         * uri参数是我们放在资源文件夹里的音乐资源路径
         */
    }

    // 按下menu键会执行这个方法
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // 增加两个选项
        menu.add(0, 0, 0, R.string.menu_about);
        menu.add(0, 1, 0, R.string.menu_exit);
        return super.onCreateOptionsMenu(menu);
    }

    // 点击menu中的选项会执行这个方法
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        super.onOptionsItemSelected(item);
        switch (item.getItemId()) {
        case 0:
            // 创建新的dialog
            new AlertDialog.Builder(MusicPlayer.this)
                    .setTitle(R.string.menu_about)
                    .setMessage(R.string.about_message)
                    .setPositiveButton(R.string.dialog_yes,
                            new DialogInterface.OnClickListener() {

                                @Override
                                public void onClick(DialogInterface dialog,
                                        int which) {
                                    // 不做任何处理
                                }
                            }).show();// 要show 要不然显示不出
            break;
        case 1:
            finish();
            break;
        }
        return true;
    }
}

这里只是讲解了怎么在播放资源文件夹里的音乐,功能以后我会一一添加。
注释都写得很齐全,希望大家看得懂,看不懂可以在评论区提问,我会一一回答,另外我自己也学的不好,希望大家谅解。