0

に多くの問題がありますMediaPlayer。少なくとも2.3までは、古いOSバージョンに関係している可能性があります。

あるサウンドが正常に再生されているActivity(別のサウンドを起動する直前)2番目のサウンドをポップActivityして最初のサウンドに戻るとき、ポップの直前にサウンドファイルを再生します(super.onBackPressedを使用します)。

これらの古いデバイス(〜2.3)では、サウンドファイルが途切れます。を起動して再生するのと同じ方法を使用しMediaPlayerます。

MediaPlayerusing 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;
}
4

0 に答える 0