私のプログラムにはsetNextMediaPlayer()
というメソッドが含まれていたため、最近アプリを公開しました。ユーザーはクラッシュを報告しています。このはAPI 16+でのみ動作し、私のアプリはAPI 8+をサポートしています。私は、同じ効果を達成する別の方法があるのだろうかと思っていました。Android MediaPlayer setNextMediaPlayer()代替
私のアプリにはテキストがあり、ArrayList
にはMediaPlayers
という短いサウンドファイルがあり、それを順に再生していました。コードからこのメソッドを削除した場合、オーディオがあまりにもぎこちなくなって理解できなくなります。
私はSoundPool
クラスを使用することを考えていましたが、OnCompleteListener
はありません。どのようにすればいいのか分かりません。
基本的に私の質問はですsetNextMediaPlayer()
メソッドを使用せずにオーディオファイル間をシームレスに移行する方法はありますか?
ありがとうございました!
EDIT
は私が
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);
}
}
を発見し、このコードを追加しました。しかし、今どのように私は、オーディオファイルを追加するには?私はこれを試しました:
// assigns a file to each media player
mediaplayers = new ArrayList<CompatMediaPlayer>();
for (int i = 0; i < files.size(); i++) {
mediaplayers.add((CompatMediaPlayer) CompatMediaPlayer.create(this, files.get(i)));
}
MediaPlayerをCompatMediaPlayerにキャストできないため、クラスキャスト例外が発生しています。
あなたのアプリでデコードを処理したい場合(またはエンコードされていないPCMとしてオーディオファイルを発送する場合)は、 'AudioTrack'またはOpenSL ES APIを使用することができます。 – Michael
ありがとう、私はOpenSL ESをチェックアウトします、それはよさそうだよ – user2397906