news 2026/3/6 17:35:25

手机端AIDE安卓音乐播放代码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手机端AIDE安卓音乐播放代码

java代码

packagecom.music.app;/* 手机编程王APP & AIDE编译器联合出品 官方微信2133688724 微信公众号:手机编程APP 官网:www.shoujibiancheng.com */importandroid.Manifest;importandroid.content.Intent;importandroid.content.pm.PackageManager;importandroid.media.MediaPlayer;importandroid.net.Uri;importandroid.os.Bundle;importandroid.os.Handler;importandroid.view.View;importandroid.widget.AdapterView;importandroid.widget.ArrayAdapter;importandroid.widget.Button;importandroid.widget.ListView;importandroid.widget.SeekBar;importandroid.widget.Toast;importandroidx.appcompat.app.AppCompatActivity;importandroidx.core.app.ActivityCompat;importjava.util.ArrayList;importjava.util.List;publicclassMainActivityextendsAppCompatActivity{// 核心组件(新增选择文件按钮)privateListViewmusicList;// 音乐列表(显示已选音乐)privateSeekBarmusicSeekBar;// 进度条privateButtonplayBtn;// 播放/暂停按钮privateButtonnextBtn;// 下一曲按钮privateButtonselectBtn;// 选择文件按钮privateMediaPlayermediaPlayer;// 音乐播放核心类// 音乐数据存储privateList<String>musicNames=newArrayList<>();// 音乐名称列表privateList<String>musicPaths=newArrayList<>();// 音乐路径列表(Uri字符串形式)privateintcurrentMusicIndex=0;// 当前播放音乐索引privatestaticfinalintFILE_SELECT_REQUEST=101;// 文件选择请求码// 进度条更新 handler(主线程更新UI)privateHandlerseekBarHandler=newHandler();@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 初始化组件(新增选择按钮初始化)initView();// 初始化MediaPlayermediaPlayer=newMediaPlayer();}// 初始化UI组件(新增选择文件按钮及点击事件)privatevoidinitView(){musicList=findViewById(R.id.musicList);musicSeekBar=findViewById(R.id.musicSeekBar);playBtn=findViewById(R.id.playBtn);nextBtn=findViewById(R.id.nextBtn);// 新增选择文件按钮(需先修改布局文件,见步骤三)selectBtn=findViewById(R.id.selectBtn);// 选择文件按钮点击事件(打开系统文件管理器)selectBtn.setOnClickListener(v->openFileSelector());// 播放/暂停按钮点击事件(优化判断:无已选音乐时提示选择)playBtn.setOnClickListener(v->{if(musicPaths.isEmpty()){Toast.makeText(this,"请先选择音乐文件",Toast.LENGTH_SHORT).show();return;}if(mediaPlayer.isPlaying()){mediaPlayer.pause();playBtn.setText("播放");}else{playCurrentMusic();playBtn.setText("暂停");}});// 下一曲按钮点击事件(无已选音乐时提示)nextBtn.setOnClickListener(v->{if(musicPaths.isEmpty()){Toast.makeText(this,"请先选择音乐文件",Toast.LENGTH_SHORT).show();return;}currentMusicIndex=(currentMusicIndex+1)%musicPaths.size();playCurrentMusic();});// 进度条拖动事件(跳转音乐进度)musicSeekBar.setOnSeekBarChangeListener(newSeekBar.OnSeekBarChangeListener(){@OverridepublicvoidonProgressChanged(SeekBarseekBar,intprogress,booleanfromUser){if(fromUser&&mediaPlayer.isPlaying()){mediaPlayer.seekTo(progress);}}@OverridepublicvoidonStartTrackingTouch(SeekBarseekBar){}@OverridepublicvoidonStopTrackingTouch(SeekBarseekBar){}});// 音乐列表点击事件(切换播放选中音乐)musicList.setOnItemClickListener((parent,view,position,id)->{currentMusicIndex=position;playCurrentMusic();playBtn.setText("暂停");});}// 打开系统文件选择对话框(仅显示音频文件)privatevoidopenFileSelector(){// 申请读取文件权限(适配低版本Android)if(ActivityCompat.checkSelfPermission(this,Manifest.permission.READ_EXTERNAL_STORAGE)!=PackageManager.PERMISSION_GRANTED){ActivityCompat.requestPermissions(this,newString[]{Manifest.permission.READ_EXTERNAL_STORAGE},100);return;}// 配置文件选择意图:仅选择音频文件Intentintent=newIntent(Intent.ACTION_GET_CONTENT);intent.setType("audio/*");// 筛选音频格式(所有音频都能选)intent.addCategory(Intent.CATEGORY_OPENABLE);// 允许选择可打开的文件try{// 启动文件选择对话框startActivityForResult(Intent.createChooser(intent,"选择音乐文件"),FILE_SELECT_REQUEST);}catch(Exceptione){Toast.makeText(this,"请安装文件管理器",Toast.LENGTH_SHORT).show();}}// 文件选择结果回调(获取选中文件的Uri)@OverrideprotectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){super.onActivityResult(requestCode,resultCode,data);if(requestCode==FILE_SELECT_REQUEST&&resultCode==RESULT_OK&&data!=null){// 获取选中文件的Uri(Android 10+推荐用Uri操作文件,无需绝对路径)UriselectedUri=data.getData();if(selectedUri!=null){// 获取文件名(从Uri中提取)StringfileName=selectedUri.getLastPathSegment();// 添加到列表(路径存Uri字符串,名称存文件名)musicPaths.add(selectedUri.toString());musicNames.add(fileName);// 更新列表显示ArrayAdapter<String>adapter=newArrayAdapter<>(this,android.R.layout.simple_list_item_1,musicNames);musicList.setAdapter(adapter);Toast.makeText(this,"已选择:"+fileName,Toast.LENGTH_SHORT).show();}}}// 播放当前索引的音乐(适配Uri播放,替换原路径播放逻辑)privatevoidplayCurrentMusic(){try{// 重置MediaPlayermediaPlayer.reset();// 用Uri设置数据源(适配Android 10+文件权限)mediaPlayer.setDataSource(this,Uri.parse(musicPaths.get(currentMusicIndex)));// 准备播放(同步准备,简单适配)mediaPlayer.prepare();// 开始播放mediaPlayer.start();// 设置进度条最大值(音乐总时长)musicSeekBar.setMax(mediaPlayer.getDuration());// 启动进度条更新updateSeekBar();// 提示当前播放音乐Toast.makeText(this,"正在播放:"+musicNames.get(currentMusicIndex),Toast.LENGTH_SHORT).show();}catch(Exceptione){e.printStackTrace();Toast.makeText(this,"播放失败,请换一个文件试试",Toast.LENGTH_SHORT).show();}}// 实时更新进度条(每500ms更新一次)privatevoidupdateSeekBar(){seekBarHandler.postDelayed(newRunnable(){@Overridepublicvoidrun(){if(mediaPlayer.isPlaying()){intcurrentProgress=mediaPlayer.getCurrentPosition();musicSeekBar.setProgress(currentProgress);updateSeekBar();}}},500);}// 权限申请结果回调(选择文件权限)@OverridepublicvoidonRequestPermissionsResult(intrequestCode,String[]permissions,int[]grantResults){super.onRequestPermissionsResult(requestCode,permissions,grantResults);if(requestCode==100&&grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED){// 权限通过,重新打开文件选择openFileSelector();}else{Toast.makeText(this,"拒绝权限无法选择文件",Toast.LENGTH_SHORT).show();}}// 销毁时释放资源(避免内存泄漏)@OverrideprotectedvoidonDestroy(){super.onDestroy();if(mediaPlayer!=null){mediaPlayer.stop();mediaPlayer.release();mediaPlayer=null;}seekBarHandler.removeCallbacksAndMessages(null);}}Androidmanifest.xml代码<?xml version="1.0"encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.music.app"android:versionCode="1"android:versionName="1.0"><uses-sdk android:minSdkVersion="29"android:targetSdkVersion="31"/><!--存储权限(Android10+适配)--><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/><!--音频播放权限--><uses-permission android:name="android.permission.RECORD_AUDIO"/><!--允许后台播放--><uses-permission android:name="android.permission.FOREGROUND_SERVICE"/><!--应用入口Activity--><application android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.MyApplication"><activity android:name=".MainActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="android.intent.category.LAUNCHER"/></intent-filter></activity></application></manifest>activitymain.xml代码<?xml version="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="16dp"><!--音乐列表(显示已选音乐)--><ListViewandroid:id="@+id/musicList"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:divider="@android:color/darker_gray"android:dividerHeight="1dp"/><!--进度条--><SeekBarandroid:id="@+id/musicSeekBar"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="16dp"/><!--控制按钮(新增选择文件按钮,放最左侧)--><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:orientation="horizontal"android:paddingTop="16dp"><Buttonandroid:id="@+id/selectBtn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="选择文件"/><Buttonandroid:id="@+id/playBtn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="播放"android:layout_marginStart="20dp"/><Buttonandroid:id="@+id/nextBtn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="下一曲"android:layout_marginStart="20dp"/></LinearLayout></LinearLayout>
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/4 15:34:31

手机端AIDE安卓2进制计算器软件代码

java代码 package com.ejzjsq.app; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView;import androidx.appcompat.app.AppCompatActivity;public class MainActivity exte…

作者头像 李华
网站建设 2026/3/5 18:45:34

NetBox拓扑视图插件终极指南:3分钟实现网络架构可视化

还在为复杂的网络连接关系而头疼吗&#xff1f;想要一眼看透整个网络架构的脉络&#xff1f;NetBox拓扑视图插件正是您需要的网络拓扑可视化利器&#xff01;这个基于NetBox的插件能够自动识别设备间的物理连接&#xff0c;生成直观的网络拓扑图&#xff0c;让网络管理变得前所…

作者头像 李华
网站建设 2026/3/5 7:36:27

RustDesk隐私模式:企业级远程协助的安全革命

RustDesk隐私模式&#xff1a;企业级远程协助的安全革命 【免费下载链接】rustdesk 一个开源的远程桌面&#xff0c;是TeamViewer的替代选择。 项目地址: https://gitcode.com/GitHub_Trending/ru/rustdesk 在当今数字化工作环境中&#xff0c;远程桌面技术已成为企业IT…

作者头像 李华
网站建设 2026/3/5 20:43:21

如何快速实现Ubuntu全自动部署:终极无人值守安装指南

如何快速实现Ubuntu全自动部署&#xff1a;终极无人值守安装指南 【免费下载链接】ubuntu-autoinstall-generator Generate a fully-automated Ubuntu ISO for unattended installations. 项目地址: https://gitcode.com/gh_mirrors/ub/ubuntu-autoinstall-generator 在…

作者头像 李华
网站建设 2026/2/28 7:56:57

AI绘画控制技术深度解析:ControlNet如何实现精准构图控制

AI绘画控制技术深度解析&#xff1a;ControlNet如何实现精准构图控制 【免费下载链接】sd-webui-controlnet WebUI extension for ControlNet 项目地址: https://gitcode.com/gh_mirrors/sd/sd-webui-controlnet 你是否曾经因为AI生成的作品与你的构思相差甚远而感到沮丧…

作者头像 李华
网站建设 2026/3/5 22:52:16

网易云音乐脚本:3大隐藏功能解锁你的音乐自由

网易云音乐脚本&#xff1a;3大隐藏功能解锁你的音乐自由 【免费下载链接】myuserscripts 油猴脚本:网易云音乐:云盘歌曲快传(含周杰伦),歌曲下载,转存云盘,云盘匹配纠正,听歌量打卡,本地上传云盘 咪咕音乐:歌曲下载 项目地址: https://gitcode.com/gh_mirrors/my/myuserscri…

作者头像 李华