2015-12-08 1 views
0

J'essaie de faire une application mediaplayer simple à des fins personnelles/éducatives (lire un fichier mp3 spécifique) mais j'ai un problème avec d'autres applications. J'utilise les services pour jouer du son en arrière-plan. Tout fonctionne bien mais quand je tourne une autre application de médias je peux toujours jouer simultanément la chanson différente. Comment "dire" au système que mon application utilise mediaplayer et que personne ne peut utiliser mediaplayer jusqu'à la fin de mes services. J'utilise AudioManager STREAM_MUSIC et commence à jouer ma chanson quand je reçois AUDIOFOCUS_GAIN vérifié par AUDIOFOCUS_REQUEST_GRANTED.Comment empêcher MediaPlayer de démarrer dans d'autres applications

pour jouer ma musique et définir la notification de premier plan i utiliser

AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
    int result = audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC, 
      AudioManager.AUDIOFOCUS_GAIN); 

    if (AudioManager.AUDIOFOCUS_REQUEST_GRANTED == result) { 

     this.startForeground(); 
     player.start(); 
    } 

Répondre

0

Vous devez utiliser les implémentations de discussion audio lecteurs multimédia, documentation détail ici:

http://developer.android.com/guide/topics/media/mediaplayer.html#audiofocus

accent audio est l'un des la chose qui assignent à toute application qui demande pour cela, signifie que si vous demandez pour cela, toute autre application l'utilisant s'arrêtera automatiquement & vous commencerez à utiliser l'audio, même cas Si vous l'utilisez pour d'autres applications, votre audio sera arrêté. Vous serez notifyed de la perte de focus audio par le gestionnaire de onAudioFocusChange de la Focus Audio Change Listener vous inscrit lors de la demande au centre audio

AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 

// Request audio focus for playback 
int result = am.requestAudioFocus(focusChangeListener, 
// Use the music stream. 
AudioManager.STREAM_MUSIC, 
// Request permanent focus. 
AudioManager.AUDIOFOCUS_GAIN); 


if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { 
// other app had stopped playing song now , so u can do u stuff now . 
} 

private OnAudioFocusChangeListener focusChangeListener = 
      new OnAudioFocusChangeListener() { 
        public void onAudioFocusChange(int focusChange) { 
          AudioManager am =(AudioManager)getSystemService(Context.AUDIO_SERVICE); 
        switch (focusChange) { 

          case (AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) : 
          // Lower the volume while ducking. 
          mediaPlayer.setVolume(0.2f, 0.2f); 
          break; 
          case (AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) : 
          pause(); 
          break; 

          case (AudioManager.AUDIOFOCUS_LOSS) : 
          stop(); 
          ComponentName component =new ComponentName(AudioPlayerActivity.this,MediaControlReceiver.class); 
          am.unregisterMediaButtonEventReceiver(component); 
          break; 

          case (AudioManager.AUDIOFOCUS_GAIN) : 
          // Return the volume to normal and resume if paused. 
          mediaPlayer.setVolume(1f, 1f); 
          mediaPlayer.start(); 
          break; 
          default: break; 
} 
} 
}; 
+0

Thx pour votre réponse, mais je cherche manière pour empêcher d'autres applications de gagner audiofocus pendant que mon application je cours. Lorsque mon application sur je veux avoir un gain audiofocus toujours toujours jusqu'à ce que je vais éteindre mon application (si une autre application commence à utiliser les médias ne reçoivent pas d'audiofocus et ne changent pas myaudiofocus) – pZCZ

+0

D'accord, je n'ai aucune idée à ce sujet . Selon mes connaissances, AudioFocus ne peut pas être tenu par une application avec une haute priorité. Parce que AudioFocus est également utilisé par notification, selon vos besoins, vous voulez qu'aucune autre application, y compris appel ou notification, ne puisse utiliser audioFocus. Même je voudrais savoir la solution de ceci s'il y en a. S'il vous plaît laissez-moi savoir si vous avez trouvé une solution. –