如何根据 Android 上的字符串变量播放音频文件

how to play an audio file based on a string variable on Android

所以我在 Android 上构建一个界面,用户在其中输入一个单词,然后如果该单词存在于数据库中,则会出现一个按钮,当用户单击它时 "OnClick= buttonClicked" - 播放声音。

有很多示例将特定字符串名称作为 MediaPlayer 的参数进行处理,但我还没有看到任何处理 字符串变量 的示例。

我的意思是:

如果您想播放播放飞机声音的特定音频。您将创建一个处理按钮点击的方法:

//play airplance.mp3 inside of res/raw:

public void buttonClicked(View view) {

  MediaPlayer mp = MediaPlayer.create(this,  R.raw.airplane);
  mp.start();
 }

有效。

现在,如果不指定字符串名称,我想使用字符串变量 myInput:

EditText editText = (EditText) findViewById(R.id.input); 
String myInput = editText.getText().toString();

我应该如何在媒体播放器中定义它?导致以下不起作用:

public void buttonClicked(View view) {

   MediaPlayer mp = MediaPlayer.create(this,  R.raw.myInput);
   mp.start();

}

我也尝试使用 getResources().getIdentifier():

public void buttonClicked(View view) {

int resID=getResources().getIdentifier(myInput, "raw",    this.getPackageName());

 MediaPlayer mp = MediaPlayer.create(this, resID);
    mp.start(); 

}

但这里也是应用程序崩溃!

有人可以帮忙吗?非常感谢!

经过长期的努力,我终于找到了答案。

如果myInput是变量,那么可以使用路径的String,解析为Uri,最后传递它进入创建()。我还使用了 try-catch,因为我注意到如果在文件夹中找不到文件,应用程序就会崩溃。这是对我有用的解决方案:

    String uriPath = "android.resource://" + getPackageName() + "/raw/" + myInput;
    Uri uri = Uri.parse(uriPath);
    mp = MediaPlayer.create(this, uri);
    try {
        mp.start();
    }
    catch (Exception e) {}