2015-12-08 50 views
0

我試圖製作一個簡單的mediaplayer應用程序只是爲了個人/教育目的(播放特定的mp3文件),但我與其他應用程序有問題。我使用服務在後臺播放聲音。一切工作正常,但當我打開另一個媒體應用我仍然可以同時播放不同的歌曲。如何向系統「告訴」我的應用正在使用mediaplayer,並且沒有人可以使用mediaplayer直到我的服務結束。我使用AudioManager STREAM_MUSIC並在AUDIOFOCUS_GAIN通過AUDIOFOCUS_REQUEST_GRANTED檢查時開始播放我的歌曲。如何防止MediaPlayer在其他應用程序中啓動

播放我的音樂和設置前景色通知我使用

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(); 
    } 

回答

0

你必須使用媒體播放器的音頻焦點實現,詳細的文檔在這裏:

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

音頻重點之一分配給任何請求的應用程序的東西,意味着如果你請求它,任何其他使用它的應用程序將自動停止&你將開始使用音頻,相同的情況下whi如果您有其他應用程序請求使用它,您的音頻將會停止。你會通過你請求將音頻

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您的回覆時註冊的音頻焦點變化監聽的onAudioFocusChange處理器被notifyed的音頻焦點損失,但我在尋找辦法阻止其他應用在我的應用運行時獲得audiofocus。當我的應用程序在我想要audiofocus獲得pernamently始終直到我將關閉我的應用程序(如果另一個應用程序開始使用媒體不獲取audiofocus並不改變myaudiofocus) – pZCZ

+0

好吧,我不知道這個。據我所知,AudioFocus不能由一個具有高優先級的應用程序保存。由於AudioFocus也被通知使用,因此根據您的要求,您希望包括呼叫或通知在內的其他應用程序不能使用audioFocus。即使我想知道這個解決方案,如果有的話。 如果您找到任何解決方案,請讓我知道。 –

相關問題