提问人:Anti Atlas Dev 提问时间:10/24/2023 最后编辑:Anti Atlas Dev 更新时间:11/7/2023 访问量:36
使用字符串值 java android 将资源文件获取到 MediaPlayer?
Getting resource file to MediaPlayer using string value java android?
问:
当我单击图标时,我正在 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
答:
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 如何替换该变量?
评论