代码之家  ›  专栏  ›  技术社区  ›  Apython

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

  •  0
  • Apython  · 技术社区  · 7 年前

    因此,我正在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();
     }
    

    这很有效。

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

    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();
    
    }
    

    public void buttonClicked(View view) {
    
    int resID=getResources().getIdentifier(myInput, "raw",    this.getPackageName());
    
     MediaPlayer mp = MediaPlayer.create(this, resID);
        mp.start(); 
    

    }

    但这里的应用程序也崩溃了!

    有人能帮忙吗?非常感谢!

    1 回复  |  直到 7 年前
        1
  •  1
  •   Apython    7 年前

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

    如果 我的输入 是变量,则可以使用路径字符串,将其解析为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) {}