电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Android Studio實現簡單音樂播放功能的示例代碼

瀏覽:77日期:2022-09-21 16:42:30

項目要求

基于Broadcast,BroadcastReceiver等與廣播相關的知識實現簡單的音樂播放功能,包括音樂的播放、暫停、切換、進度選擇、音量調整。

設計效果

(進度條時間刷新功能還沒有實現)

Android Studio實現簡單音樂播放功能的示例代碼

實現思路

音樂服務端負責播放音樂和收發廣播的功能。當音樂服務端作為接收器時,只能接收到主頁面廣播的控制消息;作為發送器時,向主頁面發送歌曲信息更新的消息 主頁面負責進度條以及音量按鈕的監聽,同時也有收發廣播的功能。當主頁面作為接收器時,只能接收到音樂服務端廣播的歌曲信息更新的消息;作為發送器時,向音樂服務端發送對歌曲播放的控制消息。

項目結構圖

Android Studio實現簡單音樂播放功能的示例代碼

主要代碼

1 主頁面

package com.example.dell.musicbox3;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.media.AudioManager;import android.os.Bundle;import android.view.View;import android.view.Window;import android.widget.ImageButton;import android.widget.SeekBar;import android.widget.TextView;public class MainActivity extends Activity implements View.OnClickListener{// 獲取界面中顯示歌曲標題、作者文本框TextView title, author;// 播放/暫停、停止按鈕ImageButton play, next, last;// 聲明音量管理器public AudioManager mAudioManager = null;// 定義進度條public static SeekBar audioSeekBar = null;// 定義音量大小public SeekBar audioVolume = null;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[] { 'JayChou', 'JayChou', 'JayChou' };@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.layout);// 獲取程序界面界面中的兩個按鈕play = (ImageButton) this.findViewById(R.id.play);last = (ImageButton) this.findViewById(R.id.last);next = (ImageButton) this.findViewById(R.id.next);audioVolume = (SeekBar) findViewById(R.id.seekBar2);audioSeekBar = (SeekBar) findViewById(R.id.seekBar1);title = (TextView) findViewById(R.id.title);author = (TextView) findViewById(R.id.author);// 為兩個按鈕的單擊事件添加監聽器play.setOnClickListener(this);last.setOnClickListener(this);next.setOnClickListener(this);// 播放進度監聽audioSeekBar.setOnSeekBarChangeListener(new SeekBarChangeEvent());// 退出后再次進去程序時,進度條保持持續更新if (MusicService.mPlayer != null) {// 設置進度條的最大值MainActivity.audioSeekBar.setMax(MusicService.mPlayer.getDuration());audioSeekBar.setProgress(MusicService.mPlayer.getCurrentPosition());}// 得到當前音量對象mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);// 把當前音量值賦給進度條audioVolume.setProgress(mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC));// 監聽音量audioVolume.setOnSeekBarChangeListener(new AudioVolumeChangeEvent());activityReceiver = new ActivityReceiver();// 創建IntentFilterIntentFilter filter = new IntentFilter();// 指定BroadcastReceiver監聽的Actionfilter.addAction(UPDATE_ACTION);// 注冊BroadcastReceiverregisterReceiver(activityReceiver, filter);Intent intent = new Intent(this, MusicService.class);// 啟動后臺ServicestartService(intent);}// 音量監聽class AudioVolumeChangeEvent implements SeekBar.OnSeekBarChangeListener {@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress,0);}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {}}// 播放進度監聽,別忘了Service里面還有個進度條刷新class SeekBarChangeEvent implements SeekBar.OnSeekBarChangeListener {@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {// 假設改變源于用戶拖動if (fromUser) {MusicService.mPlayer.seekTo(progress);// 當進度條的值改變時,音樂播放器從新的位置開始播放}}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {MusicService.mPlayer.pause();}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {MusicService.mPlayer.start();}}// 自定義的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.last:intent.putExtra('control', 2);break;//按下上一首按鈕case R.id.next:intent.putExtra('control', 3);break;}// 發送廣播,將被Service組件中的BroadcastReceiver接收到sendBroadcast(intent);}}

2 音樂服務端

package com.example.dell.musicbox3;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 implements Runnable{MyReceiver serviceReceiver;//asset文件管理對象AssetManager am;String[] musics = new String[] { '周杰?? - 龍卷風.mp3', '周杰?? - 星晴.mp3', '周杰?? - 可愛女人.mp3' };public static MediaPlayer mPlayer;// 當前的狀態,0x11代表沒有播放;0x12代表正在播放;0x13代表暫停int status = 0x11;// 記錄當前正在播放的音樂int current = 0;@Override//非綁定式服務public IBinder onBind(Intent intent){return null;}@Override//定義初始化函數public void onCreate(){super.onCreate();//獲取asset文件夾里的所有歌曲am = getAssets();// 創建具有篩選功能的服務端接收器serviceReceiver = new MyReceiver();// 創建IntentFilter過濾器IntentFilter filter = new IntentFilter();//使音樂服務端的接收器只能接收客戶端發來的CTL_ACTION消息filter.addAction(MainActivity.CTL_ACTION);//注冊帶有此篩選器且名字叫做serviceReceiver的接收器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 (current <= 0) {//停止播放mPlayer.stop();//修改currentcurrent = musics.length-1;//播放prepareAndPlay(musics[current]);status = 0x12;}else{mPlayer.stop();current--;prepareAndPlay(musics[current]);status = 0x12;}break;//下一首切換case 3:if (current >= 2) {mPlayer.stop();current = 0;prepareAndPlay(musics[current]);status = 0x12;}else{mPlayer.stop();current++;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);}}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();// 設置進度條最大值MainActivity.audioSeekBar.setMax(MusicService.mPlayer.getDuration());new Thread(this).start();} catch (IOException e) {e.printStackTrace();}}// 刷新進度條public void run() {int CurrentPosition = 0;int total = mPlayer.getDuration();while (mPlayer != null && CurrentPosition < total) {try {Thread.sleep(1000);if (mPlayer != null) {CurrentPosition = mPlayer.getCurrentPosition();}} catch (InterruptedException e) {e.printStackTrace();}MainActivity.audioSeekBar.setProgress(CurrentPosition);}}}

倉庫鏈接

MusicBox

到此這篇關于Android Studio實現簡單音樂播放功能的示例代碼的文章就介紹到這了,更多相關Android Studio 音樂播放內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Android
相關文章:
主站蜘蛛池模板: 新车测评网_网罗汽车评测资讯_汽车评测门户报道 | 玉米加工设备,玉米深加工机械,玉米糁加工设备.玉米脱皮制糁机 华豫万通粮机 | 伟秀电气有限公司-10kv高低压开关柜-高低压配电柜-中置柜-充气柜-欧式箱变-高压真空断路器厂家 | 二手Sciex液质联用仪-岛津气质联用仪-二手安捷伦气质联用仪-上海隐智科学仪器有限公司 | 英国公司注册-新加坡公司注册-香港公司开户-离岸公司账户-杭州商标注册-杭州优创企业 | 阳光1号桔柚_无核沃柑_柑橘新品种枝条苗木批发 - 苧金网 | 房在线-免费房产管理系统软件-二手房中介房屋房源管理系统软件 | 武汉印刷厂-不干胶标签印刷厂-武汉不干胶印刷-武汉标签印刷厂-武汉标签制作 - 善进特种标签印刷厂 | 广州活动策划公司-15+年专业大型公关活动策划执行管理经验-睿阳广告 | Boden齿轮油泵-ketai齿轮泵-yuken油研-无锡新立液压有限公司 | 口臭的治疗方法,口臭怎么办,怎么除口臭,口臭的原因-口臭治疗网 | 成都珞石机械 - 模温机、油温机、油加热器生产厂家 | 玉米深加工设备|玉米加工机械|玉米加工设备|玉米深加工机械-河南成立粮油机械有限公司 | 蒸汽吸附分析仪-进口水分活度仪|康宝百科| 紫外荧光硫分析仪-硫含量分析仪-红外光度测定仪-泰州美旭仪器 | 企业微信scrm管理系统_客户关系管理平台_私域流量运营工具_CRM、ERP、OA软件-腾辉网络 | 能耗监测系统-节能监测系统-能源管理系统-三水智能化 | 贵州自考_贵州自学考试网| PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 西安展台设计搭建_西安活动策划公司_西安会议会场布置_西安展厅设计西安旭阳展览展示 | 阻垢剂-反渗透缓蚀阻垢剂厂家-山东鲁东环保科技有限公司 | 天津货架厂_穿梭车货架_重型仓储货架_阁楼货架定制-天津钢力仓储货架生产厂家_天津钢力智能仓储装备 | 上海律师咨询_上海法律在线咨询免费_找对口律师上策法网-策法网 广东高华家具-公寓床|学生宿舍双层铁床厂家【质保十年】 | 体检车_移动CT车_CT检查车_CT车_深圳市艾克瑞电气有限公司移动CT体检车厂家-深圳市艾克瑞电气有限公司 | 东莞工厂厂房装修_无尘车间施工_钢结构工程安装-广东集景建筑装饰设计工程有限公司 | 超声波成孔成槽质量检测仪-压浆机-桥梁预应力智能张拉设备-上海硕冠检测设备有限公司 | 全自动固相萃取仪_高通量真空平行浓缩仪-勤业永为 | 电机修理_二手电机专家-河北豫通机电设备有限公司(原石家庄冀华高压电机维修中心) | 仓储笼_金属箱租赁_循环包装_铁网箱_蝴蝶笼租赁_酷龙仓储笼租赁 测试治具|过炉治具|过锡炉治具|工装夹具|测试夹具|允睿自动化设备 | EDLC超级法拉电容器_LIC锂离子超级电容_超级电容模组_软包单体电容电池_轴向薄膜电力电容器_深圳佳名兴电容有限公司_JMX专注中高端品牌电容生产厂家 | 无线讲解器-导游讲解器-自助讲解器-分区讲解系统 品牌生产厂家[鹰米讲解-合肥市徽马信息科技有限公司] | 运动木地板_体育木地板_篮球馆木地板_舞台木地板-实木运动地板厂家 | 成都亚克力制品,PVC板,双色板雕刻加工,亚克力门牌,亚克力标牌,水晶字雕刻制作-零贰捌广告 | 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛调查出轨取证公司_青岛婚外情取证-青岛探真调查事务所 | 在线浊度仪_悬浮物污泥浓度计_超声波泥位计_污泥界面仪_泥水界面仪-无锡蓝拓仪表科技有限公司 | 新型游乐设备,360大摆锤游乐设备「诚信厂家」-山东方鑫游乐设备 新能源汽车电池软连接,铜铝复合膜柔性连接,电力母排-容发智能科技(无锡)有限公司 | 压片机_高速_单冲_双层_花篮式_多功能旋转压片机-上海天九压片机厂家 | 艺术生文化课培训|艺术生文化课辅导冲刺-济南启迪学校 | 冷却塔风机厂家_静音冷却塔风机_冷却塔电机维修更换维修-广东特菱节能空调设备有限公司 | 点焊机-缝焊机-闪光对焊机-电阻焊设备生产厂家-上海骏腾发智能设备有限公司 | 粉丝机械,粉丝烘干机,粉丝生产线-招远市远东粉丝机械有限公司 |