1.界面布局
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="wrap_content"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal"><ImageButtonandroid:id="@+id/last"android:layout_width="79dp"android:layout_height="71dp"android:background="@drawable/last" /><ImageButtonandroid:id="@+id/play"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/play" /><ImageButtonandroid:id="@+id/next"android:layout_width="73dp"android:layout_height="71dp"android:background="@drawable/next" /><ImageButtonandroid:id="@+id/stop"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/stop" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><TextViewandroid:id="@+id/title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:ellipsize="marquee"android:marqueeRepeatLimit="marquee_forever"android:textSize="20dp" /><TextViewandroid:id="@+id/author"android:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center_vertical"android:textSize="12dp" /></LinearLayout>
</LinearLayout>

界面效果

2.编写主页面功能,在能够实现播放和暂停的基础上增加上一首和下一首按钮切换功能并添加相关监听器,其中最主要的是要进行发送广播,其主要目的是要知道你现在播的是哪一首歌
MainActivity.java

package com.example.musicbox;import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.TextView;public class MainActivity extends Activity implements OnClickListener
{// 获取界面中显示歌曲标题、作者文本框TextView title, author;// 播放/暂停、停止按钮,上一首,下一首ImageButton play, stop,last,next;ActivityReceiver activityReceiver;public static final String CTL_ACTION ="org.crazyit.action.CTL_ACTION";public static final String UPDATE_ACTION ="org.crazyit.action.UPDATE_ACTION";// 定义音乐的播放状态,0x11代表没有播放;0x12代表正在播放;0x13代表暂停int status = 0x11;String[] titleStrs = new String[] { "心愿", "约定", "美丽新世界" };String[] authorStrs = new String[] { "未知艺术家", "周蕙", "伍佰" };@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 获取程序界面界面中的两个按钮play = (ImageButton) this.findViewById(R.id.play);stop = (ImageButton) this.findViewById(R.id.stop);//获取另外两个按钮last=(ImageButton)this.findViewById(R.id.last);next=(ImageButton)this.findViewById(R.id.next) ;title = (TextView) findViewById(R.id.title);author = (TextView) findViewById(R.id.author);// 为两个按钮的单击事件添加监听器play.setOnClickListener(this);stop.setOnClickListener(this);//为其余两个按钮添加事件监听器last.setOnClickListener(this);next.setOnClickListener(this);activityReceiver = new ActivityReceiver();// 创建IntentFilterIntentFilter filter = new IntentFilter();// 指定BroadcastReceiver监听的Actionfilter.addAction(UPDATE_ACTION);// 注册BroadcastReceiverregisterReceiver(activityReceiver, filter);Intent intent = new Intent(this, MusicService.class);// 启动后台ServicestartService(intent);}// 自定义的BroadcastReceiver,负责监听从Service传回来的广播public class ActivityReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent){// 获取Intent中的update消息,update代表播放状态int update = intent.getIntExtra("update", -1);// 获取Intent中的current消息,current代表当前正在播放的歌曲int current = intent.getIntExtra("current", -1);if (current >= 0){title.setText(titleStrs[current]);author.setText(authorStrs[current]);}switch (update){case 0x11:play.setImageResource(R.drawable.play);status = 0x11;break;// 控制系统进入播放状态case 0x12:// 播放状态下设置使用暂停图标play.setImageResource(R.drawable.pause);// 设置当前状态status = 0x12;break;// 控制系统进入暂停状态case 0x13:// 暂停状态下设置使用播放图标play.setImageResource(R.drawable.play);// 设置当前状态status = 0x13;break;}}}@Overridepublic void onClick(View source){// 创建IntentIntent intent = new Intent("org.crazyit.action.CTL_ACTION");switch (source.getId()){// 按下播放/暂停按钮case R.id.play:intent.putExtra("control", 1);break;// 按下停止按钮case R.id.stop:intent.putExtra("control", 2);break;case R.id.last:intent.putExtra("control", 3);case R.id.next:intent.putExtra("control", 4);}// 发送广播,将被Service组件中的BroadcastReceiver接收到sendBroadcast(intent);}
}

3.编写musicservice接收和发送广播实现对应功能

package com.example.musicbox;
import java.io.IOException;import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.IBinder;public class MusicService extends Service
{MyReceiver serviceReceiver;AssetManager am;String[] musics = new String[] { "wish.mp3", "promise.mp3","beautiful.mp3" };MediaPlayer mPlayer;// 当前的状态,0x11代表没有播放;0x12代表正在播放;0x13代表暂停int status = 0x11;// 记录当前正在播放的音乐int current = 0;@Overridepublic IBinder onBind(Intent intent){return null;}@Overridepublic void onCreate(){super.onCreate();am = getAssets();// 创建BroadcastReceiverserviceReceiver = new MyReceiver();// 创建IntentFilterIntentFilter filter = new IntentFilter();filter.addAction(MainActivity.CTL_ACTION);registerReceiver(serviceReceiver, filter);// 创建MediaPlayermPlayer = new MediaPlayer();// 为MediaPlayer播放完成事件绑定监听器mPlayer.setOnCompletionListener(new OnCompletionListener() // ①{@Overridepublic void onCompletion(MediaPlayer mp){current++;if (current >= 3){current = 0;}//发送广播通知Activity更改文本框Intent sendIntent = new Intent(MainActivity.UPDATE_ACTION);sendIntent.putExtra("current", current);// 发送广播,将被Activity组件中的BroadcastReceiver接收到sendBroadcast(sendIntent);// 准备并播放音乐prepareAndPlay(musics[current]);}});}public class MyReceiver extends BroadcastReceiver{@Overridepublic void onReceive(final Context context, Intent intent){int control = intent.getIntExtra("control", -1);switch (control){// 播放或暂停case 1:// 原来处于没有播放状态if (status == 0x11){// 准备并播放音乐prepareAndPlay(musics[current]);status = 0x12;}// 原来处于播放状态else if (status == 0x12){// 暂停mPlayer.pause();// 改变为暂停状态status = 0x13;}// 原来处于暂停状态else if (status == 0x13){// 播放mPlayer.start();// 改变状态status = 0x12;}break;// 停止声音case 2:// 如果原来正在播放或暂停if (status == 0x12 || status == 0x13){// 停止播放mPlayer.stop();status = 0x11;}//上一首case 3:current--;if(current < 0)current = 0;prepareAndPlay(musics[current]);//下一首case 4:current++;if(current > 2)current = 0;prepareAndPlay(musics[current]);//上一首
//                case 3:
//                    current--;
//                    if(current < 0)
//                        current = 0;
//                    if (status == 0x12)
//                    {//                        // 准备并播放音乐
//                        prepareAndPlay(musics[current]);
//                        status = 0x11;
//                    }
//
//                    //下一首
//                case 4:
//                    current++;
//                    if(current > 2)
//                        current = 0;
//                    if (status == 0x12)
//                    {//                        // 准备并播放音乐
//                        prepareAndPlay(musics[current]);
//                        status = 0x11;
//                    }}// 广播通知Activity更改图标、文本框Intent sendIntent = new Intent(MainActivity.UPDATE_ACTION);sendIntent.putExtra("update", status);sendIntent.putExtra("current", current);// 发送广播,将被Activity组件中的BroadcastReceiver接收到sendBroadcast(sendIntent);}}private void prepareAndPlay(String music){try{// 打开指定音乐文件AssetFileDescriptor afd = am.openFd(music);mPlayer.reset();// 使用MediaPlayer加载指定的声音文件。mPlayer.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(), afd.getLength());// 准备声音mPlayer.prepare();// 播放mPlayer.start();}catch (IOException e){e.printStackTrace();}}
}

最后要注意的是需要在AndroidManifest.xml里加上service

<service android:name=".MusicService"></service>

实现效果



项目代码
链接: musicbox.

Android简单音乐盒,添加音乐播放的 上一首 和 下一首 控制相关推荐

  1. Android 简单的本地音乐播放器Demo

    一个小小的本地音乐播放器,花了几个小时完成的,帮朋友做的毕业作业. 包含基本播放功能.进度条显示和拖拽.时间倒计.后台播放.一键刷新.收藏操作.单独播放收藏页的音乐.... 代码没有一定的模式和注释, ...

  2. Android Studio实现简单的音乐播放(播放、暂停、停止、上一首、下一首)

    Android Studio实现简单的音乐播放(播放.暂停.停止.上一首.下一首) 简要介绍 采用Service组件实现后台播放,BroadcastReceiver实现消息传递.BroadcastRe ...

  3. 如何在H5页面上添加音乐播放

    在制作网页的时候,经常会遇到一些带音乐播放的场景,作品的右上角有一个音频按钮,会播放音乐,点击切换播放和暂停.下面就讲一讲如何在h5网页上添加音乐播放. 其实是很简单的,只需要简单几步就可以完成了 1 ...

  4. html5中加入音乐怎么弄,如何在H5页面上添加音乐播放

    在制作网页的时候,经常会遇到一些带音乐播放的场景,作品的右上角有一个音频按钮,会播放音乐,点击切换播放和暂停.下面就讲一讲如何在h5网页上添加音乐播放. 其实是很简单的,只需要简单几步就可以完成了 1 ...

  5. Android歌词秀设计思路(3)通用的音乐播放服务(上)

    MediaPlayerService作为通用的音乐播放Service类,它的功能有: 控制音乐播放,停止,暂停,前/后歌曲切换. Audio Focus相关处理(对应应用程序切换). Intent处理 ...

  6. Android 9.0蓝牙音乐上一首、下一首、暂停和播放

    代码路径: packages/apps/Bluetooth/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerStateMachine. ...

  7. 安卓简单音乐播放器——上一首、下一首、暂停和停止

    安卓超简单音乐播放器 功能上一首.下一首.暂停和停止 歌曲状态控制语句: switch (control){// 播放或暂停case 1:// 原来处于没有播放状态if (status == 0x11 ...

  8. 基于Android的MediaPlayer的音乐播放器的封装

    基于Android的MediaPlayer的音乐播放器的封装 使用过android原生的mediaplayer来做音频播放的同学们,肯定是经历过一些痛苦的,因为android提供了一个状态机,确实这个 ...

  9. 音乐应用开发Android应用开发--MP3音乐播放器界面设计(2)

    在写这篇文章之前,xxx已写过了几篇关于改音乐应用开发主题的文章,想要了解的朋友可以去翻一下之前的文章 Android应用开发--MP3音乐播放器界面计划(2) 2013年5月25日 简.美音乐播放器 ...

最新文章

  1. GitHub为所有人免费提供了所有核心功能-这就是您应该关心的原因
  2. 【观点】“另类”设计模式
  3. /src/log4j.xml
  4. 9soc sensor与bayer sensor 区别,内外置isp
  5. EditText 编辑文本控件
  6. KMP算法--深入浅出
  7. 前众信旅游B端产品经理吴彪:如何搭建B端电商产品及用户体系
  8. c语言构造数据类型有,《c语言程序设计基础7构造数据类型.ppt
  9. 邮件服务器在企业网中的应用
  10. SIFT讲解(SIFT的特征点选取以及描述是重点)
  11. docker-compose 实战案例
  12. 漫步数学分析二——欧几里得空间
  13. Java基础之字符如何截取?
  14. console.log(iVal)是什么?显示在哪里?
  15. 手机 — oppo手机录音放在哪个文件夹里
  16. HTML5文件API之FileReader
  17. amd cpu安装osx 10.9.2(同样适应intel构架)
  18. 输入阻抗和输出阻抗概念
  19. html表格中如何画单元格中对角线
  20. RuoYi-Vue——图标使用

热门文章

  1. python实验 模块(运用jieba,词云wordcloud)
  2. 德国计划修订法案以获取社交媒体用户明文密码
  3. 平安科技与天方达签署合作协议,开创智能体检新时代
  4. 建信笔试 10.10
  5. 存储Hold住一切:但迟延制约性能
  6. Robocup3D如何进行代码的编写
  7. django解决错误Reverse for 'show' with arguments '()' and keyword arguments '{}' not found. 办法
  8. 实现elementui输入框只能输入数字和一个小数点
  9. java毕业生设计校园流浪猫图鉴管理系统的设计与实现计算机源码+系统+mysql+调试部署+lw
  10. 如何从脚本小子变成黑客大神?