AndroidStudio实现简单音乐播放功能的示例代码

AndroidStudio实现简单音乐播放功能的示例代码

2023年7月7日发(作者:)

AndroidStudio实现简单⾳乐播放功能的⽰例代码项⽬要求基于Broadcast,BroadcastReceiver等与⼴播相关的知识实现简单的⾳乐播放功能,包括⾳乐的播放、暂停、切换、进度选择、⾳量调整。设计效果(进度条时间刷新功能还没有实现)实现思路⾳乐服务端负责播放⾳乐和收发⼴播的功能。当⾳乐服务端作为接收器时,只能接收到主页⾯⼴播的控制消息;作为发送器时,向主页⾯发送歌曲信息更新的消息主页⾯负责进度条以及⾳量按钮的监听,同时也有收发⼴播的功能。当主页⾯作为接收器时,只能接收到⾳乐服务端⼴播的歌曲信息更新的消息;作为发送器时,向⾳乐服务端发送对歌曲播放的控制消息。项⽬结构图主要代码1 主页⾯package ox3;import ty;import astReceiver;import t;import ;import Filter;import anager;import ;import ;import ;import utton;import r;import ew;public class MainActivity extends Activity implements kListener{ // 获取界⾯中显⽰歌曲标题、作者⽂本框 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 = "_ACTION"; public static final String UPDATE_ACTION = "_ACTION"; // 定义⾳乐的播放状态,0x11代表没有播放;0x12代表正在播放;0x13代表暂停 int status = 0x11; String[] titleStrs = new String[] { "龙卷风", "可爱⼥⼈", "星晴" }; String[] authorStrs = new String[] { "JayChou", "JayChou", "JayChou" }; @Override public void onCreate(Bundle savedInstanceState) { te(savedInstanceState); requestWindowFeature(E_NO_TITLE); setContentView(); // 获取程序界⾯界⾯中的两个按钮 play = (ImageButton) ewById(); last = (ImageButton) ewById(); next = (ImageButton) ewById(); audioVolume = (SeekBar) findViewById(r2); audioSeekBar = (SeekBar) findViewById(r1); title = (TextView) findViewById(); author = (TextView) findViewById(); // 为两个按钮的单击事件添加监听器 lickListener(this); lickListener(this); lickListener(this); // 播放进度监听 eekBarChangeListener(new SeekBarChangeEvent()); // 退出后再次进去程序时,进度条保持持续更新 if (r != null) { // 设置进度条的最⼤值 (ation()); gress(rentPosition()); } // 得到当前⾳量对象 mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE); // 把当前⾳量值赋给进度条 gress(mAudioManager .getStreamVolume(_MUSIC)); // 监听⾳量 eekBarChangeListener(new AudioVolumeChangeEvent()); activityReceiver = new ActivityReceiver(); // 创建IntentFilter IntentFilter filter = new IntentFilter(); // 指定BroadcastReceiver监听的Action ion(UPDATE_ACTION); // 注册BroadcastReceiver registerReceiver(activityReceiver, filter); Intent intent = new Intent(this, ); // 启动后台Service startService(intent); } // ⾳量监听 class AudioVolumeChangeEvent implements BarChangeListener { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { eamVolume(_MUSIC, progress, 0); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } } // 播放进度监听,别忘了Service⾥⾯还有个进度条刷新 class SeekBarChangeEvent implements BarChangeListener { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // 假设改变源于⽤户拖动 if (fromUser) { (progress); // 当进度条的值改变时,⾳乐播放器从新的位置开始播放 } } @Override public void onStartTrackingTouch(SeekBar seekBar) { (); } @Override public void onStopTrackingTouch(SeekBar seekBar) { (); } } // ⾃定义的BroadcastReceiver,负责监听从Service传回来的⼴播 public class ActivityReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { // 获取Intent中的update消息,update代表播放状态 int update = Extra("update", -1); // 获取Intent中的current消息,current代表当前正在播放的歌曲 int current = Extra("current", -1); if (current >= 0) { t(titleStrs[current]); t(authorStrs[current]); } switch (update) { case 0x11: geResource(); status = 0x11; break; // 控制系统进⼊播放状态 case 0x12: // 播放状态下设置使⽤暂停图标 geResource(); // 设置当前状态 status = 0x12; break; // 控制系统进⼊暂停状态 case 0x13: // 暂停状态下设置使⽤播放图标 geResource(); // 设置当前状态 status = 0x13; break; } }} @Override public void onClick(View source) { // 创建Intent Intent intent = new Intent("_ACTION"); switch (()) { // 按下播放/暂停按钮 case : ra("control", 1); break; case : ra("control", 2); break; //按下上⼀⾸按钮 case : ra("control", 3); break; } // 发送⼴播,将被Service组件中的BroadcastReceiver接收到 sendBroadcast(intent); }}2 ⾳乐服务端package ox3;import ption;import e;import astReceiver;import t;import ;import Filter;import ileDescriptor;import anager;import layer;import letionListener;import r;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() { te(); //获取asset⽂件夹⾥的所有歌曲 am = getAssets(); // 创建具有筛选功能的服务端接收器 serviceReceiver = new MyReceiver(); // 创建IntentFilter过滤器 IntentFilter filter = new IntentFilter(); //使⾳乐服务端的接收器只能接收客户端发来的CTL_ACTION消息 ion(_ACTION); //注册带有此筛选器且名字叫做serviceReceiver的接收器 registerReceiver(serviceReceiver, filter); // 创建MediaPlayer mPlayer = new MediaPlayer(); // 为MediaPlayer播放完成事件绑定监听器 ompletionListener(new OnCompletionListener() // ① { @Override public void onCompletion(MediaPlayer mp) { current++; if (current >= 3) { current = 0; } //发送⼴播通知Activity更改⽂本框 Intent sendIntent = new Intent(_ACTION); ra("current", current); // 发送⼴播,将被Activity组件中的BroadcastReceiver接收到 sendBroadcast(sendIntent); // 准备并播放⾳乐 prepareAndPlay(musics[current]); } }); } public class MyReceiver extends BroadcastReceiver{ @Override public void onReceive(final Context context, Intent intent) { int control = Extra("control", -1); switch (control) { // 播放或暂停 case 1: // 原来处于没有播放状态 if (status == 0x11) { // 准备并播放⾳乐 prepareAndPlay(musics[current]); status = 0x12; } // 原来处于播放状态 else if (status == 0x12) { // 暂停 (); // 改变为暂停状态 status = 0x13; } // 原来处于暂停状态 else if (status == 0x13) { // 播放 (); // 改变状态 status = 0x12; } break; // 停⽌声⾳ case 2: //上⼀⾸切换 if (current <= 0) { //停⽌播放 (); //修改current current = -1; //播放 prepareAndPlay(musics[current]); status = 0x12; } else{ (); current--; prepareAndPlay(musics[current]); status = 0x12; } break; //下⼀⾸切换 case 3: if (current >= 2) { (); current = 0; prepareAndPlay(musics[current]); status = 0x12; } else{ (); current++; prepareAndPlay(musics[current]); status = 0x12; } break; } // ⼴播通知Activity更改图标、⽂本框 Intent sendIntent = new Intent(_ACTION); ra("update", status); ra("current", current); // 发送⼴播,将被Activity组件中的BroadcastReceiver接收到 sendBroadcast(sendIntent); }} private void prepareAndPlay(String music) { try { // 打开指定⾳乐⽂件 AssetFileDescriptor afd = (music); (); // 使⽤MediaPlayer加载指定的声⾳⽂件。 aSource(eDescriptor(), rtOffset(), gth()); // 准备声⾳ e(); // 播放 (); // 设置进度条最⼤值 (ation()); new Thread(this).start(); } catch (IOException e) { tackTrace(); } } // 刷新进度条 public void run() { int CurrentPosition = 0; int total = ation(); while (mPlayer != null && CurrentPosition < total) { try { (1000); if (mPlayer != null) { CurrentPosition = rentPosition(); } } catch (InterruptedException e) { tackTrace(); } gress(CurrentPosition); } }}仓库链接到此这篇关于Android Studio实现简单⾳乐播放功能的⽰例代码的⽂章就介绍到这了,更多相关Android Studio ⾳乐播放内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1688675287a161683.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信