내 앱에 메서드 setNextMediaPlayer()
이 포함되어있어 최근에 앱을 게시했으며 사용자가 충돌을보고했습니다. 이제이 은 API 16+에서만 작동하며 내 앱은 API 8+을 지원한다는 것을 알게되었습니다. 동일한 효과를 얻는 다른 방법이 있는지 궁금합니다.Android MediaPlayer setNextMediaPlayer() 대체
내 응용 프로그램에는 약간의 음성 텍스트가 있으며, 내가 수행 한 작업은 MediaPlayers
인 ArrayList
을 만들어 각각에 짧은 사운드 파일을 저장 한 다음 하나씩 재생하는 것입니다. 코드에서이 메서드를 제거하면 오디오가 너무 고르지 않게되어 이해할 수 없게됩니다.
SoundPool
클래스를 사용하려고 생각했지만 OnCompleteListener
이 없으므로 어떻게 처리 할 것인지 잘 모르겠습니다.
기본적으로 내 질문은 : setNextMediaPlayer()
메서드를 사용하지 않고 오디오 파일간에 완벽하게 전환하는 방법이 있습니까?
감사합니다.
편집
은 내가
private class CompatMediaPlayer extends MediaPlayer implements OnCompletionListener {
private boolean mCompatMode = true;
private MediaPlayer mNextPlayer;
private OnCompletionListener mCompletion;
public CompatMediaPlayer() {
try {
MediaPlayer.class.getMethod("setNextMediaPlayer", MediaPlayer.class);
mCompatMode = false;
} catch (NoSuchMethodException e) {
mCompatMode = true;
super.setOnCompletionListener(this);
}
}
public void setNextMediaPlayer(MediaPlayer next) {
if (mCompatMode) {
mNextPlayer = next;
} else {
super.setNextMediaPlayer(next);
}
}
@Override
public void setOnCompletionListener(OnCompletionListener listener) {
if (mCompatMode) {
mCompletion = listener;
} else {
super.setOnCompletionListener(listener);
}
}
@Override
public void onCompletion(MediaPlayer mp) {
if (mNextPlayer != null) {
// as it turns out, starting a new MediaPlayer on the completion
// of a previous player ends up slightly overlapping the two
// playbacks, so slightly delaying the start of the next player
// gives a better user experience
SystemClock.sleep(50);
mNextPlayer.start();
}
mCompletion.onCompletion(this);
}
}
하지만 지금은 오디오 파일을 추가하려면 어떻게 발견이 코드를 추가? 나는 이것을 시도했다 :
MediaPlayer를 CompatMediaPlayer에 캐스팅 할 수 없기 때문에 클래스 캐스트 예외가 발생한다.
앱에서 디코딩을 처리하거나 (인코딩되지 않은 PCM으로 오디오 파일을 전송하려는 경우) 'AudioTrack' 또는 OpenSL ES API를 사용할 수 있습니다. – Michael
감사합니다. OpenSL ES를 살펴 보겠습니다. 회신을 보내 주셔서 감사합니다. – user2397906