Ked*_*ape 10 android android-mediaplayer
我正在学习Android,我创建了一个包含两个按钮的活动:ToggleButton(播放/暂停)和按钮(下一个).按下Next,我有两首想要循环播放的歌曲.我有一个阵列
int [] songs={R.raw.song1,R.raw.song2};
我在我的Activity中覆盖了onClick.第一首歌很好; 但按下Next后,我收到以下错误:
无法在客户端打开文件,尝试服务器端
E/MediaPlayer(3107):在状态4中调用
E/MediaPlayer(3107):错误(-38,0)
E/MediaPlayer(3107):错误(-38,0)
E/MediaPlayer(3107):错误(1,-2147483648)
E/MediaPlayer(3107):错误(1,-2147483648)
在onCreate(Bundle ...)中,
if(mp!=null) mp.release();
mp=MediaPlayer.create(this, songs[count]);
Run Code Online (Sandbox Code Playgroud)
这是我的onClick(View v)方法:
public void onClick(View view) {
Log.v(TAG,"ID:"+view.getId());
switch (view.getId()) {
case R.id.playerbutton: //ToggleButton
if(state==0) {
mp.start();
state=1;
}
else if(state==1) {
state=0;
mp.pause();
}
break;
case R.id.next: //Next button
Log.v(TAG,"Next button pressed!");
count=(count+1)%2; //Have only two songs
mp.reset();
try {
mp.setDataSource(this, Uri.parse("android.resource://com.example.myfirstapp"+songs[count]));
mp.setOnPreparedListener(this);
mp.prepareAsync();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
mp.start();
break;
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,我每次按下Next按钮都会这样做:-reset mp(即MediaPlayer对象) - 设置一个新的数据源,用于播放下一首歌曲-start mp
至于使用setOnPreparedListener或prepareAsync,我读了这个问题.
我哪里错了?
我相信你设置的数据源是错误的.
将其更改为:
mp.setDataSource(this, Uri.parse("android.resource://com.example.myfirstapp/"+songs[count]));
Run Code Online (Sandbox Code Playgroud)
注意包名后面的尾部斜杠.
| 归档时间: |
|
| 查看次数: |
23390 次 |
| 最近记录: |