如何从 Uri class 获取本地资源的 int?

how to get int from Uri class for local resource?

我正在尝试用 Uri 做一些感觉应该相对简单的事情,但我在任何地方都没有找到直接的答案,也许我正在尝试做的事情不需要使用 Uri。

在我项目的 res/raw 文件夹中,我有一堆具有相同名称但以不同数字结尾的 .wav 文件:

res/
raw/
sample_0.wav
sample_1.wav
sample_2.wav
sample_3.wav

我想将其中之一加载到 SoundPool 中,如下所示:

Soundpool sp = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);

public void playSound(int i, Activity a){
spPath = Uri.parse("android.resource://jgjp.com.appname/raw/R.raw.sample_"+i);
int spID = sp.load(a, spPath, 1);
sp.play(spID, 1, 1, 1, 0, 1);
}

我正在使用 Uri 对象,因为我希望能够根据收到的参数更改资源文件名的最后一位。

我的问题出在 int spID = sp.load(a, spPath, 1); 行,它期望 spPath 是一个 int 而不是 Uri。我知道像 R.raw.sample_1 这样的资源标识符实际上是 return int 值,在我用 Uri.parse() 设置它之后如何从 Uri class 中获取相应的 int?

查看 Uri android 文档 class 并没有太多收获,虽然我可以找到很多关于设置 Uri 的教程,但我找不到太多关于如何使用它的教程.

您可以使用 Resources.getIdentifier() 获取原始资源的数字 ID,然后在播放函数中使用它:

int id = getResources().getIdentifier("sample_0", "raw", getPackageName());