1

我有一个活动,它有一系列按钮,按下时应该播放音频文件。我一直在尝试使用 MediaPlayer 来实现它,但是我无法让它工作。这是我一直在尝试的代码:

     final MediaPlayer mp = new MediaPlayer();
    Button ger1play = (Button) findViewById(R.id.ger1play);ger1play.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
          mp.setDataSource(this, R.raw.greet_1);
          mp.prepare();
          mp.start();

      }
  });

setDateSource 方法似乎不起作用,谁能告诉我哪里出错了?然后我想根据按下的按钮将 mediaPlayer 设置为相关的音频文件,这可能吗?

更新

        final MediaPlayer mp = new MediaPlayer();
    Button ger1play = (Button) findViewById(R.id.ger1play);ger1play.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
    try {
                        Uri myUri = Uri.parse(R.raw.greet_1);

                       mp.setDataSource(GreetingsLesson.this, R.raw.greet_1);

                       mp.prepare();

                       mp.start();

                    } catch (IllegalArgumentException e) {

                       e.printStackTrace();

                    } catch (IllegalStateException e) {

                       e.printStackTrace();

                    } catch (IOException e) {

                       e.printStackTrace();

                    }
       }
    });
4

4 回答 4

1

尝试这个:

     final MediaPlayer mp = new MediaPlayer();
    Button ger1play = (Button) findViewById(R.id.ger1play);ger1play.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
  try {

                     mp.setDataSource(CurrentActivity.this, R.raw.greet_1);

                     mp.prepare();

                     mp.start();

                  } catch (IllegalArgumentException e) {

                     e.printStackTrace();

                  } catch (IllegalStateException e) {

                     e.printStackTrace();

                  } catch (IOException e) {

                     e.printStackTrace();

                  }
     }
  });
于 2012-04-26T13:12:15.973 回答
0

你是在模拟器中运行这个吗?如果是这样,请检查您的 AVD 管理器是否在硬件下,添加属性“音频播放支持 | 是”

于 2012-07-19T13:22:53.520 回答
0

如果您想使用来自应用程序原始资源或应用程序资产文件的文件之一发送媒体播放器对象,您可以执行以下操作:

try {
AssetFileDescriptor fd = getResources().openRawResouceFd(R.raw.greet_1);
mp.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getLength());
mp.start();
fd.close();
} catch (IllegalArgumentException e) {
// handle exception
} catch (IllegalStateException e) {
// handle exception
} catch (IOException e) {
// handle exception
}
于 2012-04-26T13:59:59.803 回答
0

为什么不直接使用

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

然后你不需要准备或开始。

于 2012-04-26T14:40:18.270 回答