最近在做一个音乐播放器,遇到了一些难题,所以深深的感觉到了自己的不足。所以呢,准备把自己一段时间的学习做个有条理的笔记,为自己打基础,也是为大家做贡献。
今天,我通过网上其他博主的博客,了解到了他们的笔记,也是一字一句的实现出来了。好了,废话不多说,直接开始吧。
## 第一步 ##
新建Android项目
项目名:MediaPlayer
包名:com.MediaPlayer
在res文件夹下新建raw文件夹,里面放音乐文件
音乐文件名字只能由小写字母 横杠 还有数字组成。
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;
}
}
这里只是讲解了怎么在播放资源文件夹里的音乐,功能以后我会一一添加。
注释都写得很齐全,希望大家看得懂,看不懂可以在评论区提问,我会一一回答,另外我自己也学的不好,希望大家谅解。