Android Studio制作简易音乐盒
Android Studio制作简易音乐盒,实现播放/暂停、停止、上一首、下一首功能
前段时间学习了服务组件及其应用、广播接收者组件与通知,于是学做了一个简易音乐盒,以实现播放/暂停、停止、上一首、下一首这些功能。(我用的Android Studio3.6)
项目效果图
编译制作过程
主要增加及改动了以下文件
首先是在AndroidManifest.xml里配置service。关于AndroidManifest.xml文件的作用(可参考)
导入歌曲和图片,一般是在res文件夹下创建raw文件夹存放歌曲,我放在assets文件夹里,所以最开始创建的raw文件夹没用到。关于assets和raw的区别(可参考)
如何创建assets文件夹(与raw的创建类似):
前端设计
拖控件进行布局,两个textview控件以显示歌曲信息,四个imagebutton控件以实现相应功能
功能实现
MainActivity文件
最外层MainActivity函数里定义我需要用到的变量和子类
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[]{"zero","blackswan","ugh"};String[] authorStrs=new String[]{"BTS","BTS","BTS"};
onCreate函数,获取相应按钮以及添加监听器、注册receiver
protected 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);title=(TextView) findViewById(R.id.title);author=(TextView) findViewById(R.id.author);last=(ImageButton) this.findViewById(R.id.last);next=(ImageButton) this.findViewById(R.id.next);//为按钮的单击事件添加监听器play.setOnClickListener(this);stop.setOnClickListener(this);last.setOnClickListener(this);next.setOnClickListener(this);activityReceiver=new ActivityReceiver();//创建IntentFilterIntentFilter filter=new IntentFilter();//指定BroadcastReceiver监听Actionfilter.addAction(UPDATE_ACTION);//注册BroadcaastReceiverregisterReceiver(activityReceiver,filter);Intent intent=new Intent(this,MusicService.class);//启动后台servicestartService(intent);}
ActivityReceiver子类,负责监听从Service传回来的广播,用switch控制系统状态
public class ActivityReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent){//获取Intent中的update消息,update代表播放状态int update = intent.getIntExtra("update",-1); //获取current中的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;}}}
onClick函数,用switch判断点击事件,向Service中的receiver发送广播
public 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);break;//按下下一首按钮case R.id.next:intent.putExtra("control",4);break;}//发送广播,将被Service组件中的BroadcastReceiver接收到sendBroadcast(intent);}
MusicService文件
同样的,在最外层函数定义需要用到的变量和子类
MyReceiver serviceReceiver;AssetManager am;String[] musics=new String[]{"zero.mp3","blackswan.mp3","ugh.mp3"};MediaPlayer mPlayer;//当前的状态,0x11代表没有播放,0x12代表正在播放,0x13代表暂停int status=0x11;//记录当前正在播放的音乐int current=0;
onCreate函数
@Override
public void onCreate(){super.onCreate();am=getAssets();//创建BroadcastReceiverserviceReceiver=new MyReceiver();//创建IntentFilterIntentFilter filter=new IntentFilter();filter.addAction(MainActivity.CTL_ACTION);//注册receiver收到CTL_ACTION信息registerReceiver(serviceReceiver,filter);//创建MediaPlayermPlayer=new MediaPlayer();//为MediaPlayer播放完成事件绑定监听器mPlayer.setOnCompletionListener(new MediaPlayer.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]);}});}
MyReceiver子类,接收MainActivity发来的信息
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;}break;//播放上一首case 3:prepareAndPlay(musics[--current]);status=0x12;break;//播放下一首case 4:prepareAndPlay(musics[++current]);status=0x12;break;}//广播通知Activity更改图标、文本框Intent sendIntent=new Intent(MainActivity.UPDATE_ACTION);sendIntent.putExtra("update",status);sendIntent.putExtra("current",current);//发送广播,将被Activity组件中的BroadcastReceiver接收到sendBroadcast(sendIntent);}}
prepareAndPlay函数,准备并播放音乐
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();}}
另外我的as之前不小心更新成了3.6版本,有些内容放在之前的版本并不适用,但总体来说差别不大。
以上便是我学习并制作简易音乐盒的过程及代码。如果有哪里说错或写错的地方欢迎指正,感谢!
Android Studio制作简易音乐盒相关推荐
- Android Studio制作简易微信界面
文章目录 制作要求 一.top,buttom页面制作 二.四个tab页面和activity_main页面制作 1.四个tab页面 2.activity_main页面 三 . 五个java文件 制作要求 ...
- Android studio制作计算器源代码
版权声明:本文为博主原创文章,未经博主允许不得转载.https://mp.csdn.net/postedit/82623704 一.Android studio制作计算器源代码 这是我学Android ...
- android页面布局计算机,Android Studio制作简单计算器App
Android Studio制作简单计算器App 计算机界面如图: 程序设计步骤: (1)在布局文件中声明编辑文件框EditText,按钮Button等组件. (2)在MainActivity中获取组 ...
- Android Studio制作.9图片,看这一篇就够了
一..9.png图片概念 这是安卓开发里面的一种特殊的图片 这种格式的图片在android 环境下具有自适应调节大小的能力,不会失真 (1)允许开发人员定义可扩展区域,当需要延伸图片以填充比图片本身更 ...
- Android Studio 制作微信界面 上
工程功能介绍 打开app,首先是个闪屏界面(常见于一般打开app时的小广告),设置时间为2s后进入登录界面.在登录界面中,中间可以输入密码,点击登录按钮进入微信的界面. 微信的界面由4个fragm ...
- 蓝牙聊天App设计1:Android Studio制作蓝牙聊天通讯软件(UI界面设计)
前言:蓝牙聊天App设计全部有三篇文章(一.UI界面设计,二.蓝牙搜索配对连接实现,三.蓝牙连接聊天),这篇文章是一.UI界面设计 课程1:Android Studio小白安装教程,以及第一个Andr ...
- 蓝牙聊天App设计3:Android Studio制作蓝牙聊天通讯软件(完结,蓝牙连接聊天,结合生活情景进行蓝牙通信的通俗讲解,以及代码功能实现,内容详细,讲解通俗易懂)
前言:蓝牙聊天App设计全部有三篇文章(一.UI界面设计,二.蓝牙搜索配对连接实现,三.蓝牙连接聊天),这篇文章是:三.蓝牙连接聊天. 课程1:Android Studio小白安装教程,以及第一个An ...
- Android Studio制作搜索栏
Android Studio制作搜索栏 前言 一.何为自定义控件? 二.制作步骤 1.引入布局 2.布局解析 测试 前言 一.何为自定义控件? 系统自带的控件都是直接或间接继承自View的,View是 ...
- android studio线性布局做计算器,Android studio设计简易计算器
本文实例为大家分享了Android studio设计简易计算器的具体代码,供大家参考,具体内容如下 效果显示: 第一步,简单的界面布局 xmlns:tools="http://schemas ...
- 物联网控制APP入门专题(四)---使用android studio制作一个控制页面的APP框架
摘要:上篇文章讲了如何用阿里云IoT Studio快速制作一个网页版的手机端,以及通过第三方平台将这个网页打包成一个APK文件,使它可以安装到手机实现APP的功能.但是使用第三方平台做的APP是需要收 ...
最新文章
- CF429D Tricky Function(求解公式、经分析转为求平面最近点对、思维)
- 黑马vue---13、事件修饰符的介绍
- 计算机学院张旭豪,饿了么收购百度外卖,可以看出张旭豪硕士研究生是有多厉害!...
- layui 渲染select下拉选项 ,日期控件的用法
- 机器学习之特征工程-特征选择
- pycharm创建一个Hello
- 3个阶段 项目征名_3个月!签约亿元以上项目66个
- (转)awk实例练习(二)
- cartographer探秘第四章之代码解析(七)--- Cartographer_ros
- 题目243-交换输出
- 创建一个超链接,点击这个超链接,显示数据库中的数据信息:MVC模式查询
- t检验临界值表中的n是什么_t检验(t-test)临界值表
- ReadHub android版
- 微信二次开发-windows版微信Hook开发SDK之C#版
- 杀戮尖塔是用java_杀戮尖塔修改class文件图文教程
- 学习笔记 | Python编程从入门到实践 | 第二章变量和简单数据类型
- Android,linux常用资源下载链接
- CSS实现立体字的效果
- 点击按钮复制微信号/公众号,并打开微信APP搜索H5如何制作。
- Unity3D-游戏场景优化之遮挡剔除(Occlusion Culling)的使用
热门文章
- aec一pc_什么是AEC声学回声消除器?
- 网络工程师考试大纲的考试要求有哪些
- U-Mail反垃圾邮件网关-垃圾邮件的“克星”
- 设计一个python程序来计算显示通过如图2-7所示的管道_python程序设计习题与答案...
- USB2.0系列(锆石科技FPGA)
- 苹果回应巴西政府禁止销售不附赠充电器的iPhone;小米造车新进展;国内首家以数据服务为核心的央企数据中台上线 | EA周报...
- devicemapper介绍
- Lattice PCIe 学习 1
- 【智能车学习】FTM模块
- HarryPotter第二部—Nagini