如何将RAW文件夹用于多个音频文件

时间:2014-01-13 15:40:58

标签: java android audio

我有以下功能:

strNameValue = prefs.getString("NamePosition", "");
        inNameValueConversion = Integer.parseInt(strNameValue);

        if (inNameValueConversion == 0) {
            DisplayInformation(inNameValueConversion, R.raw.audio01);
        }
        if (inNameValueConversion == 1) {
            DisplayInformation(inNameValueConversion, R.raw.audio02);
        }
        if (inNameValueConversion == 2) {
            DisplayInformation(inNameValueConversion, R.raw.audio03);
        }
        if (inNameValueConversion == 3) {
            DisplayInformation(inNameValueConversion, R.raw.audio04);
        }

因为所有音频文件都以audio开头,并且最后只有数字更改,我想创建一个允许我使用更少代码的函数:

public void DisplayInformation(int inNum, final int inSoundResource) {
        if (inSoundResource < 2) {
            strIConv = String.valueOf("0" + inSoundResource);
            inConv = Integer.parseInt(strIConv);
            int k = R.raw.audio+"inConv";
        }
}

我收到以下错误:audio cannot be resolved or is not a field

如何编辑上面的代码,这样我就可以使用一个函数而不是使用那么多的IF语句,因为它会超过90次。

3 个答案:

答案 0 :(得分:2)

您可以使用getIdentifier(),因此您的代码如下所示:

public void displayInformation(int inNum) {
    String id = "audio"; 

    // for inNum < 9, we need to add 0, so for example when you pass 0
    // id will be 01, not 1
    if (inNum < 9) then id += "0";

    //based on your code, 0 - audio01, 1 - audio02 etc, so add 1
    id += (inNum + 1); 

    // call getIdentifier with string containing resource name, which are in your raw folder
    // and in your package
    int k = getResources().getIdentifier(id, "raw", "your.package.name.here");

    //k now contains an id of your resource, so do whatever you want with it
}

然后您的代码可以简化为:

strNameValue = prefs.getString("NamePosition", "");
inNameValueConversion = Integer.parseInt(strNameValue);

displayInformation(inNameValueConversion);

请记住在调用getIdentifier()时使用您的包名称。

文档在这里:http://developer.android.com/reference/android/content/res/Resources.html#getIdentifier(java.lang.String,java.lang.String,java.lang.String)

答案 1 :(得分:1)

你可以尝试这样做,就像这篇文章中提到的那样:https://stackoverflow.com/a/5626631/3178834

在您的情况下,您必须为资源xml创建一个所有音频文件的数组,然后将其与res.getXml一起加载到java中。只需按照上面的链接即可。

答案 2 :(得分:1)

以这种方式构建R值将无效 - 您需要使用反射。

例如:

import java.lang.reflect.Field;
/* ... */


int id = R.id.class.getField("video" + i).getInt(0);