news 2026/5/13 12:29:16

手机端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/5/10 8:23:46

LrcApi终极指南:快速构建专业级歌词同步服务

LrcApi终极指南&#xff1a;快速构建专业级歌词同步服务 【免费下载链接】LrcApi A Flask API For StreamMusic 项目地址: https://gitcode.com/gh_mirrors/lr/LrcApi 在当今音乐应用开发领域&#xff0c;歌词同步功能已成为提升用户体验的核心要素。LrcApi作为一款功能…

作者头像 李华
网站建设 2026/5/13 12:17:37

时序模型早停策略终极指南:3步告别过拟合陷阱

时序模型早停策略终极指南&#xff1a;3步告别过拟合陷阱 【免费下载链接】Time-Series-Library A Library for Advanced Deep Time Series Models. 项目地址: https://gitcode.com/GitHub_Trending/ti/Time-Series-Library 还在为时序模型训练中的过拟合问题困扰吗&…

作者头像 李华
网站建设 2026/5/13 12:17:37

终极免费视频下载神器:yt-dlp-gui 完整使用指南 [特殊字符]

终极免费视频下载神器&#xff1a;yt-dlp-gui 完整使用指南 &#x1f680; 【免费下载链接】yt-dlp-gui Windows GUI for yt-dlp 项目地址: https://gitcode.com/gh_mirrors/yt/yt-dlp-gui 还在为下载在线视频而烦恼吗&#xff1f;yt-dlp-gui 是一款基于 yt-dlp 的 Wind…

作者头像 李华
网站建设 2026/5/10 12:58:32

ClickShow:让你的鼠标点击操作从此一目了然

ClickShow&#xff1a;让你的鼠标点击操作从此一目了然 【免费下载链接】ClickShow 鼠标点击特效 项目地址: https://gitcode.com/gh_mirrors/cl/ClickShow 你是否曾在屏幕录制或远程演示时&#xff0c;担心观众看不清你的鼠标点击位置&#xff1f;是否在复杂的界面操作…

作者头像 李华
网站建设 2026/5/10 20:04:51

HoRNDIS终极指南:macOS与Android无缝网络共享解决方案

HoRNDIS终极指南&#xff1a;macOS与Android无缝网络共享解决方案 【免费下载链接】HoRNDIS Android USB tethering driver for Mac OS X 项目地址: https://gitcode.com/gh_mirrors/ho/HoRNDIS 在移动办公时代&#xff0c;如何快速稳定地将Android网络共享到Mac电脑成为…

作者头像 李华