我正在学习 Android,我创建了一个具有两个按钮的 Activity :一个 ToggleButton(播放/暂停)和一个 Button(下一步)。我有两首歌曲希望在按下 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]);
这是我的 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;
}
}
基本上,每次按下“下一步”按钮时我都会这样做: -reset mp(即 MediaPlayer 对象) - 为播放下一首歌曲设置一个新的数据源 -启动 mp
关于使用setOnPreparedListener
或prepareAsync
,我看了this SO question .
我哪里错了?
最佳答案
我认为您设置的数据源有误。
将其更改为:
mp.setDataSource(this, Uri.parse("android.resource://com.example.myfirstapp/"+songs[count]));
注意包名后面的斜杠。
关于android - 媒体播放器 : Couldn't open file on client side; Error(-38, 0) 等等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17865836/