に多くの問題がありますMediaPlayer
。少なくとも2.3までは、古いOSバージョンに関係している可能性があります。
あるサウンドが正常に再生されているActivity
(別のサウンドを起動する直前)2番目のサウンドをポップActivity
して最初のサウンドに戻るとき、ポップの直前にサウンドファイルを再生します(super.onBackPressedを使用します)。
これらの古いデバイス(〜2.3)では、サウンドファイルが途切れます。を起動して再生するのと同じ方法を使用しMediaPlayer
ます。
MediaPlayer
using create
(synched)を作成します。MediaPlayer
静的なコンテナに入れて保持します。でのみコンテナを空にしてリリースしましたsetOnCompletionListener
。どうしたの..
ここにいくつかのコードがあります...
// Start sound
adhocplaysoundstatic(R.raw.soundfile, getApplicationContext());
// Pop activity
super.onBackPressed();
意味
static ArrayList<MediaPlayer> staticplayers = new ArrayList<MediaPlayer>();
static public void adhocplaysoundstatic(final int MEDIA, Context context) {
MediaPlayer player = getMediaPlayerStatic(MEDIA, context);
staticplayers.add(player); // Hold on to
player.setOnCompletionListener(new OnCompletionListener() {
@Override public void onCompletion(MediaPlayer mp) {
mp.release();
staticplayers.remove(mp);
}
});
player.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
Log.d(LOG_TAG, "onPrepared, play!");
mp.start();
}});
//player.start();
}
もっと...
static protected MediaPlayer getMediaPlayerStatic(int id, Context context) throws RuntimeException {
MediaPlayer player = MediaPlayer.create(context, id);
if (player == null) {
throw new RuntimeException("Failed creating media player from id " + id);
}
else {
player.setOnErrorListener(new OnErrorListener() {
@Override public boolean onError(MediaPlayer mp, int what, int extra) {
Log.d(LOG_TAG, "MediaPlayer error: " + mp.toString() + ", what: " + what + ", extra: " + extra);
return false;
}
});
}
return player;
}