android - 通过变量名称播放原始音频剪辑

标签 android

我有一个问题困扰了我一段时间。是否可以使用变量名访问原始目录中的文件?让我解释一下。

我的 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/

相关文章:

android - 禁用 fragment 中的后退按钮按下

java - 从 Android 4.0 降级到 Android 2.2 会产生很多问题

Android 服务执行被拒绝

android - 更新sdk出错

android - FFmpeg4Android如何停止处理?

android - AdMob 不刷新广告

android - ImageView 中的 Vimeo 视频缩略图

Android:无法通过 Volley 动态添加 ListView 项目

android - roboGuice 和 butterknife 依赖注入(inject)的区别

android - 如何在应用程序关闭时获取 OneSignal 推送通知?