0
我有和音頻播放器和視頻播放器的應用程序。我希望當音頻播放器在後臺播放時,我開始播放視頻,音頻播放器停止播放。Android - 視頻啓動時暫停音樂播放器
我可以通過廣播接收器輕鬆實現這一點,通過在打開視頻時發送意圖,並在音頻播放器中監聽該意圖並在onReceive()中停止它。
但是,我想將此功能不僅擴展到我的音頻播放器,而且還擴展到所有音頻播放器。所以我想如果視頻播放器打開時有標準的意圖發送?
我有和音頻播放器和視頻播放器的應用程序。我希望當音頻播放器在後臺播放時,我開始播放視頻,音頻播放器停止播放。Android - 視頻啓動時暫停音樂播放器
我可以通過廣播接收器輕鬆實現這一點,通過在打開視頻時發送意圖,並在音頻播放器中監聽該意圖並在onReceive()中停止它。
但是,我想將此功能不僅擴展到我的音頻播放器,而且還擴展到所有音頻播放器。所以我想如果視頻播放器打開時有標準的意圖發送?
您應該使用音頻焦點爲此。參考RandomMusicPlayer示例android項目:
public class AudioFocusHelper {
AudioManager mAM;
MusicFocusable mFocusable;
private final AudioManager.OnAudioFocusChangeListener listener = new AudioManager.OnAudioFocusChangeListener() {
@Override
/**
* Called by AudioManager on audio focus changes. We implement this by calling our
* MusicFocusable appropriately to relay the message.
*/
public void onAudioFocusChange(int focusChange) {
if (mFocusable == null) return;
switch (focusChange) {
case AudioManager.AUDIOFOCUS_GAIN:
mFocusable.onGainedAudioFocus();
break;
case AudioManager.AUDIOFOCUS_LOSS:
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
mFocusable.onLostAudioFocus(false);
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
mFocusable.onLostAudioFocus(true);
break;
default:
}
}
};;
public AudioFocusHelper(Context ctx, MusicFocusable focusable) {
mAM = (AudioManager) ctx.getSystemService(Context.AUDIO_SERVICE);
mFocusable = focusable;
}
/** Requests audio focus. Returns whether request was successful or not. */
public boolean requestFocus() {
return AudioManager.AUDIOFOCUS_REQUEST_GRANTED ==
mAM.requestAudioFocus(listener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
}
/** Abandons audio focus. Returns whether request was successful or not. */
public boolean abandonFocus() {
return AudioManager.AUDIOFOCUS_REQUEST_GRANTED == mAM.abandonAudioFocus(listener);
}
}