使用字符串值 java android 将资源文件获取到 MediaPlayer?

Getting resource file to MediaPlayer using string value java android?

提问人:Anti Atlas Dev 提问时间:10/24/2023 最后编辑:Anti Atlas Dev 更新时间:11/7/2023 访问量:36

问:

当我单击图标时,我正在 recyclerview 中播放音频,这是我的代码:

//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();
    
MediaPlayer mediaPlayer = MediaPlayer.create(view.getContext(), R.raw.file);
mediaPlayer.start();                //mediaPlayer.release();
}});

一切都很好,只需要从我从模型中得到的变量中用它的名字播放踢的音频。

如何在 R.raw.filename 中将文件替换为字符串? 提前致谢R.raw.file

java android 字符串 资源 media-player

评论


答:

0赞 Mohmmaed-Amleh 10/25/2023 #1

请确保文件操作发生在 IO 线程上,因为它可能会消耗大量时间。

InputStream is = null;
FileOutputStream out = null;
Context context = view.getContext();
try {
    File tempFile = new File(context.getFilesDir(), "your_File_name");
    if (tempFile.exists()){
        tempFile.delete();
    }
    is = context.getResources().openRawResource(R.raw.file);
    out = new FileOutputStream(tempFile);
    copy(is, out);

    MediaPlayer mediaPlayer = MediaPlayer.create(this, Uri.fromFile(tempFile));
    mediaPlayer.start();
} catch (Exception e) {
    //Log
} finally {
    if (is != null) {
        try {
            is.close();
        } catch (Exception e) {
            //Log
        }
    }
    if (out != null) {
        try {
            is.close();
        } catch (Exception e) {
            //Log
        }
    }
}

private void copy(final InputStream in, final OutputStream out)
    throws IOException {
    final byte[] b = new byte[8192];
    for (int r; (r = in.read(b)) != -1; ) {
        out.write(b, 0, r);
    }
}

评论

0赞 Anti Atlas Dev 10/25/2023
感谢您的回答,请告诉我如何使用 R.raw.file 中的字符串,因为我有一大堆文件和该静态字符串中的名称,谢谢 🙏
0赞 Mohmmaed-Amleh 10/25/2023
为了正确理解你,您在 Raw 文件夹中有一个文件列表,并且您想获取文件名列表以便运行它们?右?
0赞 Anti Atlas Dev 10/26/2023
是的,我在原始文件夹中有一个文件列表 .mp3 和存储在回收器视图模型中的名称,我需要按它的名称播放选定的名称,我从模型中选择了名称并将其存储在静态字符串变量中,我面临的问题是 R.raw.filename 如何替换该变量?