MediaPlayer错误android

MediaPlayer错误android,android,media-player,Android,Media Player,我有一个活动,它有一系列的按钮,当按下这些按钮时,应该会播放音频文件。我一直在尝试使用MediaPlayer实现这一点,但我无法让它工作。 以下是我一直在尝试的代码: final MediaPlayer mp = new MediaPlayer(); Button ger1play = (Button) findViewById(R.id.ger1play);ger1play.setOnClickListener(new View.OnClickListener() {

我有一个活动,它有一系列的按钮,当按下这些按钮时,应该会播放音频文件。我一直在尝试使用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();

                    }
       }
    });
试试这个:

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

                  }
     }
  });
试试这个:

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

                  }
     }
  });

如果要使用应用程序原始资源或应用程序资产文件中的一个文件发送媒体播放器对象,可以按如下操作:

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
}

如果要使用应用程序原始资源或应用程序资产文件中的一个文件发送媒体播放器对象,可以按如下操作:

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
}
为什么不直接使用

mp = MediaPlayer.create(this, R.raw.greet_1);
那么您就不需要准备或启动了。

为什么不直接使用

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

那么你就不需要准备或启动了。

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

是否在模拟器中运行此功能?如果是这样,请检查您的AVD管理器是否在硬件下添加了属性“Audio playback support | yes”(音频播放支持)

,当我尝试此Eclipse时,该属性仍然会给我一个错误,并建议将问候1的类型更改为Uri?确保raw的loaction为
res/raw/
,并且u正在使用
mp.setDataSource(CurrentActivity.this,R.raw.greet_1)如果它说将类型更改为Uri,那么使用
urimyuri=Uri.parse(R.raw.greet_1)
这样做会产生一个错误,说“将类型greet_1更改为字符串”?
MediaPlayer mp=MediaPlayer.create(this,R.raw.greet_1);按钮ger1play=(按钮)findViewById(R.id.ger1play);ger1play.setOnClickListener(新视图.OnClickListener(){@Override public void onClick(视图v){try{mp.prepare();mp.start();}
更新你的代码当我尝试这个Eclipse时,仍然给我一个错误,它建议将greet_1的类型更改为Uri?确保raw的操作是
res/raw/
并且你正在使用
mp.setDataSource(CurrentActivity.this,R.raw.greet_1);
如果它说将类型更改为Uri,那么使用
Uri myUri=Uri.parse(R.raw.greet_1)
执行此操作会出现一个错误,显示“将类型greet_1更改为字符串”?
MediaPlayer mp=MediaPlayer.create(this,R.raw.greet_1);Button ger1play=(Button)findViewById(R.id.ger1play);ger1play.setOnClickListener(new View.OnClickListener(){@Override public void onClick(View v){try{mp.prepare();mp.start()}
更新您的代码04-26 15:08:26.326:E/MediaPlayer(528):在状态8 04-26 15:08:26.326:W/System.err(528):java.lang.IllegalStateException 04-26 15:08:26.326:W/System.err(528):在android.media.MediaPlayer.setDataSource(本机方法)中调用的attachNewPlayer这是在添加代码04-26 15:08:26.326:E/MediaPlayer(528):在状态8 04-26 15:08:26.326:W/System.err(528):java.lang.IllegalStateException 04-26 15:08:26.326:W/System.err(528):在android.media.MediaPlayer.setDataSource(本机方法)中调用的attachNewPlayer后单击按钮时发生的情况这是在添加代码后单击按钮时发生的情况这不起作用,因为它表示“无法分配最终局部变量mp,因为它是在封闭类型中定义的”仍在努力获取此工作这不起作用,因为它表示“无法分配最终局部变量mp,因为它是在封闭类型中定义的”仍然在努力让它工作