Android MediaPlayer:Canned';t在客户端打开文件;错误(-38,0)及更多
我正在学习Android,我创建了一个有两个按钮的活动:一个按钮(播放/暂停)和一个按钮(下一个)。我有两首歌曲想在按下Next时循环播放。我有一个数组Android MediaPlayer:Canned';t在客户端打开文件;错误(-38,0)及更多,android,android-mediaplayer,Android,Android Mediaplayer,我正在学习Android,我创建了一个有两个按钮的活动:一个按钮(播放/暂停)和一个按钮(下一个)。我有两首歌曲想在按下Next时循环播放。我有一个数组 int[]songs={R.raw.song1,R.raw.song2} 我在我的活动中忽略了这一点。第一首歌唱得很好;但按“下一步”后,出现以下错误: 无法在客户端打开文件,正在尝试服务器端 E/MediaPlayer(3107):在状态4中调用启动 E/MediaPlayer(3107):错误(-38,0) E/MediaPlayer(31
int[]songs={R.raw.song1,R.raw.song2}代码>
我在我的活动中忽略了这一点。第一首歌唱得很好;但按“下一步”后,出现以下错误:
无法在客户端打开文件,正在尝试服务器端
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…)中
下面是我的onClick(视图v)方法:
基本上,每次按下“下一步”按钮,我都会这样做:
-重置mp(即MediaPlayer对象)
-为播放下一首歌曲设置新的数据源
-启动mp
至于使用setOnPreparedListener
或prepareAsync
,我读到了
我哪里出错了?我相信您将数据源设置错了
将其更改为:
mp.setDataSource(this, Uri.parse("android.resource://com.example.myfirstapp/"+songs[count]));
注意包名后面的斜杠。是的,没有注意到!另外,我将prepareAsync
替换为prepare()
,因为我是从文件(而不是流)播放的。谢谢可能重复的
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;
}
}
mp.setDataSource(this, Uri.parse("android.resource://com.example.myfirstapp/"+songs[count]));