You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 19:27:04