MusicBox

article/2025/11/5 18:36:47

MusicBox

编写音乐盒代码,并添加音乐播放的 上一首 和 下一首 控制。
1.添加所需的图片以及音乐文件;
在这里插入图片描述2.编写xml文件,上一首、下一首、暂停、播放按钮以及歌曲的名字和作者

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:orientation="horizontal"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="0"><ImageButtonandroid:id="@+id/last"android:layout_width="wrap_content"android:layout_height="match_parent"app:srcCompat="@drawable/last" /><ImageButtonandroid:id="@+id/play"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/play" /><ImageButtonandroid:id="@+id/stop"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/stop" /><ImageButtonandroid:id="@+id/next"android:layout_width="wrap_content"android:layout_height="match_parent"app:srcCompat="@drawable/next" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:id="@+id/title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="25sp"android:textColor="#9C27B0"android:ellipsize="marquee"android:layout_weight="1"android:marqueeRepeatLimit="marquee_forever" /><TextViewandroid:id="@+id/author"android:textSize="25sp"android:gravity="center_vertical"android:layout_weight="1"android:layout_width="wrap_content"android:layout_height="wrap_content" /></LinearLayout>
</LinearLayout>

3.MainActivity(函数作用有备注)

package com.example.a1112;import androidx.appcompat.app.AppCompatActivity;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 AppCompatActivity implements OnClickListener
{// 获取界面中显示歌曲标题、作者文本框TextView title, author;// 播放/暂停、停止按钮ImageButton play, stop;ImageButton last,next;ActivityReceiver activityReceiver;public static final String CTL_ACTION ="org.xr.action.CTL_ACTION";public static final String UPDATE_ACTION ="org.xr.action.UPDATE_ACTION";// 定义音乐的播放状态,0x11代表没有播放;0x12代表正在播放;0x13代表暂停int status = 0x11;String[] titleStrs = new String[] { "Legends Never Die", "约定", "美丽新世界" };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);last.setImageResource(R.drawable.last);next.setImageResource(R.drawable.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);// 注册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.xr.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);}
}

4.MusicService,控制点击按钮后的状态

package com.example.a1112;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[] { "legendsneverdie.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;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();}}
}

5.截图
在这里插入图片描述
在这里插入图片描述在这里插入图片描述链接: https://github.com/GODFF556.


http://chatgpt.dhexx.cn/article/vnfeJVPJ.shtml

相关文章

Musicplayer

Musicplayer Python 音乐播放器 功能&#xff1a; 首先可以实现本地音乐的播放&#xff0c;能够打开电脑端的文件&#xff0c;文件中进行多选&#xff0c;实现暂停、上一曲、下一曲的功能。在此基础上&#xff0c;完成随机播放列表和网络端下载的功能。 设计方法&#xff1a; 本…

MusicBox(音乐播放器)

这两天做了一个小型的音乐播放器&#xff0c;基本功能都已实现&#xff0c;同时也让我对CSliderCtrl&#xff0c;MCI_OPEN_PARMS以及控件之间的消息映射&#xff0c;数据转换等有了更深入的理解&#xff0c;下面是自己编程的详细过程&#xff1a; 1 首先将控件的位置都摆好&a…

musicbox使用方法_使用Pi MusicBox收听流音乐

musicbox使用方法 在用Raspberry Pi 控制圣诞树灯的项目完成之后&#xff0c;下一个项目是什么&#xff1f; 我最终开始尝试使用Pi Musicbox进行修补&#xff0c;这是Mopidy的Raspbian的一种版本 &#xff0c;它允许用户在“无头”的Raspberry Pi上播放各种流媒体服务&#xff…

推荐一个高大上的网易云音乐命令行播放工具:musicbox

网易云音乐上有很多适合程序猿的歌单&#xff0c;但是今天文章介绍的不是这些适合程序员工作时听的歌&#xff0c;而是一个用Python开发的开源播放器&#xff0c;专门适用于网易云音乐的播放。这个播放器的名称为MusicBox, 特色是用命令行版本执行音乐的播放。 github地址&…

移动开发技术(三)MusicBox

实验要求 使用广播机制&#xff0c;编写音乐盒代码&#xff0c;添加音乐播放的播放、暂停、停止、上一首和下一首控制 实验步骤 一、布局设置 添加一个LinearLayout&#xff0c;选择垂直分布。在里面添加两个LinearLayout&#xff1a; ①music_show&#xff1a;用于展示图片…

Gap Statistic算法详解

在Kmean算法确定K值的问题里&#xff0c;可以使用手肘法&#xff0c;也可以用Gap statistic 算法。手肘法的缺点是不够自动化&#xff0c;而Gap不再需要“手肘法”式的肉眼判断&#xff0c;而只需要找出使Gap Statistic最大的K值即可。因此&#xff0c;Gap和适用于批量化作业。…

IDEA 统计插件Statistic:查看你的代码量

最近接触了一款IDEA统计代码量的插件Statistic&#xff0c;简介一下Statistic的安装。 一、插件下载安装 File->Settings->Plugins&#xff0c;输入Statistic&#xff0c;点击install,安装完后选择重启idea。 二、运行使用 重启完后&#xff0c;点击refesh即可看到代码量…

idea中安装统计代码statistic插件

百度一圈都是直接在idea中安装statistic插件&#xff0c;就不再重复 1.从官网下载&#xff1a;http://plugins.jetbrains.com/plugin/4509-statistic/versions 插件包 到本地 2.选择从本地安装 3. 4.重启idea 5.工具栏

探索 t Statistic的稳健性

探索 t Statistic的稳健性 探索t-statistic 的稳健性 假设有2组数据&#xff0c;x1,…,xm; y1,…,yn。 t-test的假设为两组数据的平均值无差异 即&#xff1a; 令X和Sx为为x数组的平均值和标准差&#xff0c;Y和Sy为y数组的平均值和标准差&#xff1b;则H0的判别式为 在H0…

AS 使用Statistic插件统计代码行数

1.下载插件及安装 点击File → Setting→ Plugins&#xff0c;搜索Statistic插件&#xff0c;点击install按钮安装插件。 2.插件使用 安装成功后重启AS&#xff0c;在View→Tool Windows→Statistic&#xff0c;选择后AS底部会显示Statistic按钮&#xff0c; 点击Refresh按钮…

IDEA 统计Statistic插件下载地址

IDEA 统计Statistic插件安装地址 https://plugins.jetbrains.com/plugin/4509-statistic/versions

idea-统计代码行数Statistic

idea统计代码行数可以用到插件&#xff1a;Statistic。 步骤&#xff1a; File→Settings进入Plugins点击Marketplace搜索Statistic 安装蓝框标出的插件 重启idea后就可以看到效果了&#xff08;图是拿的别人的&#xff0c;基本就是这效果&#xff09;如果没有下边的stat…

IDEA代码统计插件Statistic-统计项目代码文件数及代码行数

今天被问到项目的代码量及代码行数&#xff0c;由于项目代码量还挺多&#xff0c;第一时间想到idea有没有插件可以统计&#xff0c;经过搜索&#xff0c;还真有&#xff0c;当然也可以自己写代码实现。 以下介绍Statistic的安装及使用。 1、在IDEA左上角点击File->Setting…

idea中代码统计工具Statistic的配置与使用

idea中代码统计工具Statistic的配置与使用 有的同学在idea中下载了statistic的插件但是就是没看到这个插件的标志&#xff0c;这是因为插件对应了不同的版本,需要下载对应的版本&#xff1a;https://plugins.jetbrains.com/plugin/4509-statistic/versions 下载完成之后File—…

Intellij idea使用Statistic统计代码行数的方法

一、安装Statistic 1、打开IDEA 2、打开settings进行设置 3、选择plugins&#xff0c;搜索Statistic并安装 4、下载完成之后&#xff0c;重启IDEA&#xff0c;此时Statistic就安装好了 二、使用Statistic 1、安装好Statistic之后我们可以通过以下步骤 将Statistic插件的控制台展…

IDEA - 如何安装Statistic代码统计插件?

插件地址 插件下载 插件选择 &#xff08;1&#xff09;如果IDEA的版本比较新&#xff0c;IDEA会自动选择Statistic对应的版本&#xff1b; &#xff08;2&#xff09;如果IDEA的版本比较老&#xff0c;请使用Statistic的3.8.1版本。 如何安装 1. 在线搜索并安装 2. 离线…

GIT统计代码量及IDEA Statistic统计解析

GIT统计代码量 Git统计个人提交代码行数 git log --format%aN | sort -u | while read name; do echo -en "$name\t"; git log --author"$name" --prettytformat: --numstat | awk { add $1; subs $2; loc $1 - $2 } END { printf "added lines:…

idea查看代码行数Statistic

软著需要知道代码行数&#xff0c;安装Statistic插件即可。 安装后&#xff0c;重启&#xff0c;点击左下角“refresh”即可查看各类文件行数 可以设置统计代码的文件格式

IDEA统计代码量Statistic插件

IDEA统计代码量Statistic插件 Statistic插件安装步骤1、步骤&#xff08;文字&#xff09;2、步骤&#xff08;图&#xff09; 结尾 Statistic插件 Statistic插件&#xff0c;IDEA中用来统计代码量的插件&#xff0c;话不多说上步骤。安装步骤 1、步骤&#xff08;文字&#…

Android Studio代码统计插件Statistic

一、打开 AS -> File -> Settings -> Plugins&#xff0c;搜索statistic&#xff0c;在线安装即可 二、安装完成后&#xff0c;在AS底部找到Statistic 三、点击Statistic&#xff0c;打开界面&#xff0c;如果没有数据&#xff0c;点击Refresh按钮刷新