2014-01-21 5 views
0

Я создаю приложение, и в одном макете (просто называйте его макетом A), я играю медиаплеер, а затем, когда я перешел на другой макет (просто назовите его Layout B), я хочу, чтобы звук из макета A продолжается в макете B, и когда я вернулся к макету A, я также хочу, чтобы медиаплеер продолжал воспроизведение музыки, которая была воспроизведена ранее.два медиаплеера сразу сыграли

В Layout А, я установить этот код в OnCreate:

player = MediaPlayer.create(this, R.raw.sound); 
    if(!isMuted()) 
    { 
     player.setLooping(true); 
     player.start(); 
    } 

... 

    btn.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View arg0) 
     { 
      // TODO Auto-generated method stub 
      Intent intent = new Intent(A.this, B.class); 
      stop=1; 
      startActivity(intent);   
     } 
    }); 

и этот код:

@Override 
protected void onPause() 
{ 
    super.onPause(); 
    if (stop!=1) 
    { 
     //stop=1 if i go to another layout, for example when i want to go to Layout B 
     //if the device is automatically locked, i want the media player is paused and it resumed when i unlock the device, so i use stop!=1 to know whether the sound should be paused or not 
     player.pause(); 
     length = player.getCurrentPosition(); 
    } 
} 

@Override 
protected void onResume() 
{ 
    super.onResume(); 
    if(!isMuted()) 
    { 
     //isMuted is method to know whether the sound is muted or not, if it isn't muted, then the sound is resumed 
     player.seekTo(length); 
     player.setLooping(true); 
     player.start(); 
    } 
} 

В макет B, я использовал этот код в OnCreate:

player = MediaPlayer.create(this, R.raw.sound); 
.... 

И этот код:

protected void onPause() 
{ 
    super.onPause(); 
    player.pause(); 
    length = player.getCurrentPosition(); 
} 

@Override 
protected void onResume() 
{ 
    super.onResume(); 
    if(!isMuted()) 
    { 
     if(player.isPlaying()) 
     { 

     } 
     else 
     { 
      player.seekTo(length); 
      player.setLooping(true); 
      player.start(); 
     } 
    } 
} 

Но это проблема.

  1. Когда я пошел в Layout B, медиа-плеер от формата А и Media Player от макета B играет в то же время, так что звук воспроизводится одновременно в одно время.

  2. Когда я вернулся к макету A, Media Player в макете B остановлен, а Media Player в макете A остановлен и снова воспроизведен с начала, он не продолжал воспроизведение медиа-проигрывателя, который был воспроизведен до ,

  3. Когда устройство заблокировано, медиаплеер все еще воспроизводится, хотя я использовал индикатор, должен ли он быть приостановлен или нет. Любая коррекция кода?

ответ

0

Я бы рекомендовал вам использовать Службу для воспроизведения и приостановки/остановки вашей музыки. Не рекомендуется использовать Activity для обработки музыки таким образом. Вы можете запустить Сервис, а затем воспроизвести музыку в нем. Службы работают в фоновом режиме и не могут быть автоматически уничтожены слишком часто по сравнению с Activity. Вот пример кода приложения, который похож на то, что вам нужно media player sound continue in all activities

Смежные вопросы