我有一个问题困扰了我一段时间。是否可以使用变量名访问原始目录中的文件?让我解释一下。
我的 raw/目录中有超过 100 个声音 fragment ,分别命名为 sound1、sound2、sound3 等等。在我的应用程序中,我有一个 ListView ,它从字符串数组中提取每一行。我想做的是,当你点击某一行时,应用程序会播放相应音频文件的声音。
例如,如果我点击列表中的第 16 个项目,它会播放 sound17(补偿从 0 开始的列表)。据我所知,我只能使用“R.raw.filename”访问原始文件,我猜这是某种内存指针?因为如果我尝试做这样的事情:
public void onItemClick(AdapterView<?> parent, View arg1, int position,long arg3) {
long clipid = parent.getItemIdAtPosition(position);
MediaPlayer clip = MediaPlayer.create(SoundList.this, "R.raw.sound" + clipid);
clip.start();
}
显然它不知道“R.raw.sound”+clipid 是什么。有什么办法可以做到这一点吗?
编辑 经过更多搜索后才弄清楚。这是我使用的:
public void onItemClick(AdapterView<?> parent, View arg1, int position,long arg3) {
long clipid = parent.getItemIdAtPosition(position);
int resId = getResources().getIdentifier("sound"+clipid, "raw", "com.example.mypackage");
MediaPlayer clip = MediaPlayer.create(SoundList.this, resId);
clip.start();
}
最佳答案
试试这个:
MediaPlayer clip = MediaPlayer.create(SoundList.this, getResources().getIdentifier(clipid, "raw","{android package id}"));
您需要指定在 AndroidManifest.xml 文件中使用的包,但这应该可以满足您的要求。
关于android - 通过变量名称播放原始音频剪辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7465033/