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

Android Java:如何通过字符串动态指定R.raw资源给MediaPlayer

RecyclerView中动态播放指定音频文件的解决方案

你可以通过getResources().getIdentifier()方法,将字符串文件名转换为对应的raw资源ID,从而实现动态播放指定音频。修改后的代码如下:

//Recyclerview onClickListener
holder.icon_audio.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        String filename = String.valueOf(model.getWordA());
        Toast.makeText(view.getContext(), filename, Toast.LENGTH_SHORT).show();

        // 获取音频资源ID:注意filename不要带文件后缀(比如.mp3)
        int audioResId = view.getContext().getResources().getIdentifier(filename, "raw", view.getContext().getPackageName());
        
        // 判断资源是否存在,避免空指针崩溃
        if (audioResId != 0) {
            MediaPlayer mediaPlayer = MediaPlayer.create(view.getContext(), audioResId);
            mediaPlayer.start();
            
            // 可选:播放完成后自动释放资源
            mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    mp.release();
                }
            });
        } else {
            Toast.makeText(view.getContext(), "音频文件不存在", Toast.LENGTH_SHORT).show();
        }
    }
});

关键说明:

  • getIdentifier()三个参数分别是:资源名称(不带后缀)、资源类型(这里是"raw")、应用包名。
  • 必须判断audioResId != 0,因为找不到对应资源时方法会返回0,直接传入MediaPlayer.create()会导致创建失败返回null,引发崩溃。
  • 记得在播放完成后调用release()释放MediaPlayer资源,避免内存泄漏;也可以在页面销毁时统一管理所有正在播放的MediaPlayer实例。

内容的提问来源于stack exchange,提问作者Anti Atlas Dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 20:16:00