2017-06-01 13 views
1

このコードは、ボタンをクリックするたびに呼び出されます。ボタンをクリックしてしばらくすると、サウンドはもう表示されません。別の音楽ファイルを使用しようとしましたが、SoundPoolの代わりにMediaPlayerを使用しようとしましたが、問題は続いていました。しばらくしてから音が止まる - Android

問題についてより具体的には、それは次のようである:私は10回クリックすると、それは私は音が停止すると、それは

public void displaySound(Context context){ 
     SoundPool sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0); 
     int soundId = sp.load(context, R.raw.bubble_nice, 1); 
     sp.play(soundId, 1, 1, 0, 0, 1); 
     MediaPlayer mPlayer = MediaPlayer.create(context, R.raw.bubble_nice); 
     mPlayer.start(); 
    } 

を停止し、もう一度クリックすると、これが表示されて、音を返します私はあなたのコードを試してみましたが、解決策を見つけたE/MediaPlayer: error (1, -19)

+1

新しいものを使用する前にmPlayerをリリースする必要があります。 –

+0

どうすればいいですか? – Felipe

+0

BSavaliyaのソリューションを参照する必要があります。 –

答えて

2

、あなたは次のように試すことができます:ログの中

最初gloabally

のようなメディアプレーヤオブジェクトを宣言する210
MediaPlayer mPlayer; 

次に、ボタンをクリックして次の方法を使用します。

public void displaySound(Context context) { 
    if (mPlayer != null && mPlayer.isPlaying()) { 
     mPlayer.stop(); 
     mPlayer.reset(); 
    } 
    mPlayer = MediaPlayer.create(context, R.raw.bubble_nice); 
    mPlayer.start(); 
} 
+0

ここで働いていない – Felipe

1

あなたがメディアプレイヤーとアクティビティのonStart()メソッドを一時停止する必要がある場合は、再度呼び出すことができます。グローバル変数として まず宣言のMPlayer:コード

@Override 
protected void onStart() { 
    mPlayer.reset(); 
    super.onStart(); 
} 

@Override 
protected void onPause() { 
    mPlayer.pause(); 
    super.onPause(); 
} 

@Override 
protected void onDestroy() { 
    mPlayer.stop(); 
    super.onDestroy(); 
} 
1

怒鳴るそれはBSavaliyaのコードに小さな変更で私のために良く働きました。

if (mPlayer != null) 
{ 
    if(mPlayer .isPlaying()) 
    { 
     mPlayer .stop(); 
    }  
    mPlayer .reset(); 
} 
関連する問題