나는 MediaPlayer
개체와 모든 노래가 sd 카드에있는 회 전자가 있습니다. 각 재생, 일시 중지, 정지, 이전 및 다음 버튼의 코드를 만들려고합니다.android spinner.setSelection (position, false); 실행되지 않았습니다
회 전자에서 항목을 선택하면 MediaPlayer를 가져와 해당 데이터 소스를 설정하고 준비 메서드를 호출합니다. 여기에 코드입니다 :
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
Context context = getApplicationContext();
CharSequence text = "onItemSelected";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
try {
mediaPlayer.reset();
mediaPlayer.setDataSource(sdcard_playlist.get(arg2));
applyValuesToEqualizer();
mediaPlayer.prepare();
index = arg2;
} catch (IllegalArgumentException e1) {
e1.printStackTrace();
} catch (SecurityException e1) {
e1.printStackTrace();
} catch (IllegalStateException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
그리고 여기에 각각의 정지 및 다음 버튼에 대한 코드입니다 :
public void stopSong(View view) {
if (isPlaying) {
mediaPlayer.reset();
isPlaying = false;
spinner.setSelection(index, false); // index is the index of the chosen item from spinner
seekbar.setProgress(0);
}
}
public void nextSong(View view) {
if (isPlaying) {
mediaPlayer.reset();
isPlaying = false;
spinner.setSelection(index + 1, false);
seekbar.setProgress(0);
playPauseSong(findViewById(R.id.pause_music_button));
} else {
spinner.setSelection(index + 1, false);
seekbar.setProgress(0);
}
}
무엇인가 일어나고있는 것은 nextSong()가 호출 될 때, 모든 것이 잘 작동하는지이고 onItemSelected의 토스트()가 표시되지만 stopSong()이 호출되면 onItemSelected()가 실행되지 않고 토스트가 표시되지 않고 노래가 중지되지만 재생 버튼을 다시 클릭하면 예외가 발생합니다. 상태 1에서 호출이 시작됩니다. , 오류 (-38, 0)입니다. mediaPlayer가 재설정되고 다시 준비되지 않았기 때문입니다. 나는 이미 선택되어 스피너에서 항목을 선택하고있어 경우, spinner.setSelection(index, false);
다시 onItemSelected
를 호출하지 않습니다 사전 :
재설정 후 미디어 플레이어가 mp.prepare();를 호출하려고합니다. – Piyush
하지만 onItemSelected에서이 함수를 호출하고 있는데, 왜 nextSong()에서 호출되고 stopSong()에서 호출되지 않는 것입니까? – Hanady
당신이 onItemselect를 호출하면 Spinner의 인덱스를 true로 지정합니다. – Piyush