如何在Android上播放基于字符串变量的音频文件

时间:2018-01-15 22:30:23

标签: android audio android-mediaplayer

所以我在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();
 }

有效。

现在,如果不是指定String名称,我想使用String变量 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(); 

}

但这里应用程序崩溃了!

任何人都可以提供帮助吗?非常感谢!

1 个答案:

答案 0 :(得分:0)

经过长时间的斗争,我终于找到了答案。

如果 myInput 是变量,则可以使用路径的String,将其解析为Uri,最后将其传递给create()。我也使用了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) {}