Android选中本地音频后点击按钮播放功能的实现问题
实现步骤
1. 声明全局变量
在Activity类中声明两个全局变量,分别存储选中的音频Uri和MediaPlayer实例:
// 存储选中的音频Uri private Uri selectedAudioUri; // 音频播放器实例 private MediaPlayer mediaPlayer;
2. 存储选中的音频Uri
修改你现有的onActivityResult方法,把拿到的Uri赋值给全局变量:
@Override protected void onActivityResult(int requestCode,int resultCode,Intent data){ if(requestCode == 1){ if(resultCode == RESULT_OK){ // 存储选中的音频到全局变量 selectedAudioUri = data.getData(); } } super.onActivityResult(requestCode, resultCode, data); }
3. 绑定播放按钮点击事件,实现播放逻辑
给你的播放按钮设置点击监听器,点击时判断是否已经选中音频,再调用MediaPlayer播放:
// 假设你的播放按钮id是btn_play_audio Button playBtn = findViewById(R.id.btn_play_audio); playBtn.setOnClickListener(v -> { // 先判断是否选中了音频 if (selectedAudioUri == null) { Toast.makeText(this, "请先选择音频文件", Toast.LENGTH_SHORT).show(); return; } try { // 如果之前有播放器实例,先释放 if (mediaPlayer != null) { mediaPlayer.release(); } // 创建播放器实例,设置数据源 mediaPlayer = MediaPlayer.create(this, selectedAudioUri); // 开始播放 mediaPlayer.start(); // 可选:监听播放完成事件 mediaPlayer.setOnCompletionListener(mp -> { // 播放完成后释放资源 mp.release(); mediaPlayer = null; Toast.makeText(this, "播放完成", Toast.LENGTH_SHORT).show(); }); } catch (Exception e) { e.printStackTrace(); Toast.makeText(this, "音频播放失败", Toast.LENGTH_SHORT).show(); } });
4. 生命周期适配
在Activity销毁的时候释放播放器资源,避免内存泄漏:
@Override protected void onDestroy() { super.onDestroy(); if (mediaPlayer != null) { mediaPlayer.release(); mediaPlayer = null; } }
注意事项
- 以上代码仅适合前台页面内播放的场景,如需后台播放需要配合Service和通知栏实现
- 若播放的音频文件较大,建议添加加载状态提示,避免用户重复点击
- Android 12及以上系统不需要额外申请存储权限,通过
ACTION_GET_CONTENT拿到的Uri自带临时访问权限,可直接读取播放
内容的提问来源于stack exchange,提问作者jim
相关产品推荐
相关产品推荐

