Медиаплеер перестает работать после нажатия 14 раз - PullRequest
0 голосов
/ 07 ноября 2018

Я создаю приложение, которое издает тик при нажатии на кнопку. Но звук останавливается после щелчка 14 раз. Код здесь:

dTextVeiw.setOnClickListener(new View.onClickListener() {
  @Override
  public void onClick(View view){

    MediaPlayer mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.tic_sound);
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    mediaPlayer.start();
  }
});

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Для коротких звуков я бы порекомендовал использовать SoundPool

Class SoundPlayer(){

private final static float leftVol = 1.0f;
private final static float rightVol = 1.0f;
private final static float rate  = 1.0f;
private final static int loop = 0;
private  int priority  = 1;
private int audioId = = -1;

AudioAttributes attributes = new AudioAttributes.Builder()
    .setUsage(AudioAttributes.USAGE_GAME)
    .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
    .build();

 SoundPool soundPool= new SoundPool.Builder()
.setMaxStreams(2)
.setAudioAttributes(attributes)
.build();

public void loadSounds(Context context){
audioId = soundPool.load(context, R.raw.tic_sound, priority);
}

  public void playAudio() {  
   soundPool.play(audioId, leftVol, rightVol, priority, loop, rate) ;    
 }
} 

И используйте это так

private SoundPlayer soundPlayer;

 .... 
 ....
onCreate ...{
soundPlayer = SoundPlayer();
soundPLayer.loadSounds(this);


dTextVeiw.setOnClickListener(new View.onClickListener() {
@Override
public void onClick(View view){

 soundPLayer.playAudio();
} 
0 голосов
/ 07 ноября 2018

Нет необходимости инициализировать его каждый раз, когда вы нажимаете кнопку.

private MediaPlayer _mediaPlayer;

@Override
protected void onResume()
{
    super.onResume();
    _mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.tic_sound);
    _mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
}

@Override
protected void onCreate(@Nullable Bundle savedInstanceState)
{
    //...

    dTextVeiw.setOnClickListener(new View.onClickListener() {
        @Override
        public void onClick(View view) {
            _mediaPlayer.start();
        } 
    });
}
...