学習中Androidそして、ToggleButton(再生/一時停止)とButton(次へ)の2つのボタンを持つアクティビティを作成しました。循環させたい2つの曲があります。 Nextを押すと配列があります
int [] songs={R.raw.song1,R.raw.song2};
アクティビティのonClickを上書きしました。最初の曲は正常に再生されます。しかし、[次へ]を押すと、次のエラーが発生します。
サーバー側でファイルを開くことができませんでした
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;
}
}
基本的に、次のボタンを押すたびにこれを実行します。-resetmp(つまり、MediaPlayerオブジェクト)-次の曲を再生するための新しいデータソースを設定します-start mp
setOnPreparedListener
またはprepareAsync
の使用については、 this SO question 。
どこが間違っているのですか?
データソースの設定が間違っていると思います。
次のように変更します。
mp.setDataSource(this, Uri.parse("Android.resource://com.example.myfirstapp/"+songs[count]));
パッケージ名の後の末尾のスラッシュに注意してください。