2015-11-05 1 views
0

В моем приложении пользователь выбирает счет как 1, 21, 51, 101, 108, например, когда он выбирает с помощью кнопок или переключателя, медиаплеер имеет повторяться в определенное время. Если он выбирает 21, медиаплеер должен повторить воспроизведение музыки в 21 раз. В моем коде, если я использую цикл while внутри цикла for, он блокирует пользовательский интерфейс, не позволяя остановить или приостановить воспроизведение, если я не использовал цикл while, он воспроизводит только один раз. Пожалуйста, мне нужно решить, что любой из них будет оценен заранее. Ниже я отправляю весь мой кодповторить воспроизведение музыки определенное количество раз с использованием медиа-плеера для Android.

public class MainActivity extends Activity implements OnClickListener{ 
    private MediaPlayer mp; 
    int count; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     setVolumeControlStream(AudioManager.STREAM_MUSIC); 
     findViewById(R.id.button_1).setOnClickListener(this); 
     findViewById(R.id.button_2).setOnClickListener(this); 
     findViewById(R.id.button_3).setOnClickListener(this); 
     findViewById(R.id.button_4).setOnClickListener(this); 
     findViewById(R.id.button_5).setOnClickListener(this); 
     findViewById(R.id.pause).setOnClickListener(this); 
     findViewById(R.id.stop).setOnClickListener(this); 

    } 

    public void onClick(View v) { 

     switch (v.getId()) { 
     case R.id.button_1: 
      if (mp!=null) { 
       mp.release(); 
      } 

      player(3); 

      break; 
     case R.id.button_2: 
      if (mp!=null) { 
       mp.release(); 
      } 
      player(21); 

      break; 
     case R.id.button_3: 
      if (mp!=null) { 
       mp.release(); 
      } 
      player(51); 

      break; 
     case R.id.button_4: 
      if (mp!=null) { 
       mp.release(); 
      } 
      player(108); 

      break; 
     case R.id.button_5: 
      if (mp!=null) { 
       mp.release(); 
      } 

      break; 
     case R.id.pause: 

       mp.pause(); 


      break; 
     case R.id.stop: 

       mp.stop(); 


      break; 

     } 


    } 

    private void player(int count) { 
     // TODO Auto-generated method stub 
     mp = MediaPlayer.create(this, R.raw.a); 

     for (int i=1; i<=count ; i++){ 
      mp.start(); 
      while(mp.isPlaying()); 
    } 
     // mp.release(); 





} 
    @Override 
    protected void onDestroy() { 
     if(null!=mp){ 
      mp.release(); 
     } 
     super.onDestroy(); 
    } 

} 

ответ

1

вы можете добиться этого, установив число yourCount, что имеет номера, которые вы собираетесь повторить свой звук, и просто сделайте это

int count = 0; 
    mp.setOnCompletionListener(new OnCompletionListener() 

     @Override 
     public void onCompletion(MediaPlayer mp) { 
      if (count < yourCount) { 
       mp.start(); 
       count++; 
      } 
     } 
    }); 
    mp.start(); 
+0

где я хочу t o реализовать его в режиме создания или в состоянии переключения в моем коде. –

+0

в способе плеера, в котором вы играете свою музыку –

+0

OnCompletionListener не может быть решена ошибка наступает –

3

попробовать это, Надеюсь, что это помогает

mp.setOnCompletionListener (новый OnCompletionListener() {

@Override 
    public void onCompletion(MediaPlayer mp) { 
     // TODO Auto-generated method stub 
     // Count here and restart if required. 
    }});