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

AndroidStudio实现简单⾳乐播放功能的⽰例代码
项⽬要求
基于Broadcast,BroadcastReceiver等与⼴播相关的知识实现简单的⾳乐播放功能,包括⾳乐的播放、暂停、切换、进度选择、⾳量调整。
设计效果
进度条时间刷新功能还没有实现)
实现思路
⾳乐服务端负责播放⾳乐和收发⼴播的功能。当⾳乐服务端作为接收器时,只能接收到主页⾯⼴播的控制消息;作为发送器时,向主页⾯发送歌曲信息更新的消息
主页⾯负责进度条以及⾳量按钮的监听,同时也有收发⼴播的功能。当主页⾯作为接收器时,只能接收到⾳乐服务端⼴播的歌曲信息更新的消息;作为发送器时,向⾳乐服务端发送对歌曲播放的控制消息。
项⽬结构图
主要代码
1 主页⾯
ample.dell.musicbox3;
import android.app.Activity;
t.BroadcastReceiver;
t.Context;
t.Intent;
t.IntentFilter;
dia.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 = "azyit.action.CTL_ACTION";
public static final String UPDATE_ACTION = "azyit.action.UPDATE_ACTION"; // 定义⾳乐的播放状态,0x11代表没有播放;0x12代表正在播放;0x13代表暂停
int status = 0x11;
探空气球String[] titleStrs = new String[] { "龙卷风", "可爱⼥⼈", "星晴" };
String[] authorStrs = new String[] { "JayChou", "JayChou", "JayChou" };
@Override
public void onCreate(Bundle 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();
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(Duration());
audioSeekBar.setProgress(CurrentPosition());
}
// 得到当前⾳量对象
mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
/
/ 把当前⾳量值赋给进度条
audioVolume.setProgress(mAudioManager
.getStreamVolume(AudioManager.STREAM_MUSIC));
// 监听⾳量
audioVolume.setOnSeekBarChangeListener(new AudioVolumeChangeEvent());
activityReceiver = new ActivityReceiver();
// 创建IntentFilter
IntentFilter filter = new IntentFilter();
// 指定BroadcastReceiver监听的Action
filter.addAction(UPDATE_ACTION);
// 注册BroadcastReceiver
registerReceiver(activityReceiver, filter);
Intent intent = new Intent(this, MusicService.class);
// 启动后台Service
startService(intent);
}
// ⾳量监听
class AudioVolumeChangeEvent implements SeekBar.OnSeekBarChangeListener {  @Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress,
0);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
}激光投影键盘
// 播放进度监听,别忘了Service⾥⾯还有个进度条刷新
class SeekBarChangeEvent implements SeekBar.OnSeekBarChangeListener {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {  // 假设改变源于⽤户拖动
if (fromUser) {
开关柜无线测温装置
MusicService.mPlayer.seekTo(progress);
// 当进度条的值改变时,⾳乐播放器从新的位置开始播放
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
MusicService.mPlayer.pause();
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
MusicService.mPlayer.start();
}
}
// ⾃定义的BroadcastReceiver,负责监听从Service传回来的⼴播
public class ActivityReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// 获取Intent中的update消息,update代表播放状态
int update = IntExtra("update", -1);
// 获取Intent中的current消息,current代表当前正在播放的歌曲
int current = IntExtra("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;
}
}
}
@Override
public void onClick(View source)
{
// 创建Intent
Intent intent = new Intent("azyit.action.CTL_ACTION");
switch (Id())
{
// 按下播放/暂停按钮
case R.id.play:冯代存
intent.putExtra("control", 1);
break;
case R.id.last:
intent.putExtra("control", 2);
break;
//按下上⼀⾸按钮
case :
intent.putExtra("control", 3);
break;
}
// 发送⼴播,将被Service组件中的BroadcastReceiver接收到
sendBroadcast(intent);
}
}
2 ⾳乐服务端
ample.dell.musicbox3;
import java.io.IOException;
import android.app.Service;
t.BroadcastReceiver;
t.Context;
t.Intent;
t.IntentFilter;
t.res.AssetFileDescriptor;
t.res.AssetManager;
除水器
dia.MediaPlayer;
dia.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()
{
/
/获取asset⽂件夹⾥的所有歌曲
am = getAssets();
// 创建具有筛选功能的服务端接收器
serviceReceiver = new MyReceiver();
// 创建IntentFilter过滤器
IntentFilter filter = new IntentFilter();
//使⾳乐服务端的接收器只能接收客户端发来的CTL_ACTION消息
filter.addAction(MainActivity.CTL_ACTION);
//注册带有此筛选器且名字叫做serviceReceiver的接收器
registerReceiver(serviceReceiver, filter);
// 创建MediaPlayer
mPlayer = new MediaPlayer();
// 为MediaPlayer播放完成事件绑定
mPlayer.setOnCompletionListener(new OnCompletionListener() // ①
{
@Override
public void onCompletion(MediaPlayer mp)

本文发布于:2024-09-21 11:09:49,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/278297.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:播放   进度条   功能   接收器
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议