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
相关产品推荐
相关产品推荐

