2012-04-26 105 views
1

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

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

        } 
     } 
    }); 

回答

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

        } 
    } 
    }); 
+0

当我尝试这个Eclipse仍然给我一个错误,它建议更改greet_1到Uri的类型? – user1356791 2012-04-26 13:21:27

+0

请确保raw的位置是'res/raw /',并且您正在使用'mp.setDataSource(CurrentActivity.this,R.raw.greet_1);' – 2012-04-26 13:26:28

+0

它是res/raw。我不明白为什么它不工作? – user1356791 2012-04-26 13:27:50

0

Ifyou想与其中一个文件发送的媒体播放器对象fromapplication原料资源或应用程序资产文件,您可以找时间做如下:

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 
} 
+0

04-26 15:08:26.326:E/MediaPlayer(528):attachNewPlayer在状态8中调用 04-26 15:08:26.326:W/System.err(528):java.lang.IllegalStateException 04-26 15:08:26.326:W/System.err(528):\t at android.media.MediaPlayer.setDataSource(Native Method) 这是在添加代码后单击按钮时发生的情况 – user1356791 2012-04-26 14:09:48

0

Wh y不只是使用

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

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

+0

这不起作用说:“最后的局部变量mp不能被分配,因为它是在一个封闭类型中定义的” 仍然在努力获得这个工作 – user1356791 2012-04-26 15:01:17

0

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