[Android] [PATCH v2 2/2] PlaybackService: send EFFECT_CONTROL_SESSION on media state update
Alexandre Janniaux
alexandre.janniaux at gmail.com
Thu Feb 22 18:31:27 CET 2018
Send the *_EFFECT_CONTROL_SESSION intent when the state of current media
is updated. It allows external audio effects like equalizer or
visualizer to know the audio session id used by VLC and apply their own
effect.
See android.media.audiofx.AudioEffect.
---
.../src/org/videolan/vlc/PlaybackService.java | 38 +++++++++++++++++++++-
1 file changed, 37 insertions(+), 1 deletion(-)
diff --git a/vlc-android/src/org/videolan/vlc/PlaybackService.java b/vlc-android/src/org/videolan/vlc/PlaybackService.java
index 9313d78c1..fa58444d9 100644
--- a/vlc-android/src/org/videolan/vlc/PlaybackService.java
+++ b/vlc-android/src/org/videolan/vlc/PlaybackService.java
@@ -35,6 +35,7 @@ import android.content.ServiceConnection;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
+import android.media.audiofx.AudioEffect;
import android.media.AudioManager;
import android.media.AudioManager.OnAudioFocusChangeListener;
import android.net.Uri;
@@ -89,6 +90,7 @@ import org.videolan.vlc.util.Constants;
import org.videolan.vlc.util.Permissions;
import org.videolan.vlc.util.Util;
import org.videolan.vlc.util.VLCInstance;
+import org.videolan.vlc.util.VLCOptions;
import org.videolan.vlc.util.VoiceSearchParams;
import org.videolan.vlc.util.WeakHandler;
import org.videolan.vlc.widget.VLCAppWidgetProvider;
@@ -375,6 +377,32 @@ public class PlaybackService extends MediaBrowserServiceCompat{
};
}
+ private void sendStartSessionIdIntent() {
+ int sessionId = VLCOptions.getAudiotrackSessionId();
+ if (sessionId == 0)
+ return;
+
+ Intent intent = new Intent(AudioEffect.ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION);
+ intent.putExtra(AudioEffect.EXTRA_AUDIO_SESSION, sessionId);
+ intent.putExtra(AudioEffect.EXTRA_PACKAGE_NAME, getPackageName());
+ if (isVideoPlaying())
+ intent.putExtra(AudioEffect.EXTRA_CONTENT_TYPE, AudioEffect.CONTENT_TYPE_MOVIE);
+ else
+ intent.putExtra(AudioEffect.EXTRA_CONTENT_TYPE, AudioEffect.CONTENT_TYPE_MUSIC);
+ sendBroadcast(intent);
+ }
+
+ private void sendStopSessionIdIntent() {
+ int sessionId = VLCOptions.getAudiotrackSessionId();
+ if (sessionId == 0)
+ return;
+
+ Intent intent = new Intent(AudioEffect.ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION);
+ intent.putExtra(AudioEffect.EXTRA_AUDIO_SESSION, sessionId);
+ intent.putExtra(AudioEffect.EXTRA_PACKAGE_NAME, getPackageName());
+ sendBroadcast(intent);
+ }
+
private AudioManager mAudioManager = null;
private void changeAudioFocus(boolean acquire) {
if (mAudioManager == null)
@@ -1053,9 +1081,17 @@ public class PlaybackService extends MediaBrowserServiceCompat{
if (playlistManager.hasPlaylist())
pscb.addCustomAction("shuffle", getString(R.string.shuffle_title), isShuffling() ? R.drawable.ic_auto_shuffle_pressed : R.drawable.ic_auto_shuffle_normal);
pscb.addCustomAction("repeat", getString(R.string.repeat_title), repeatResId);
+
+ boolean mediaIsActive = state != PlaybackStateCompat.STATE_STOPPED;
+
mMediaSession.setPlaybackState(pscb.build());
- mMediaSession.setActive(state != PlaybackStateCompat.STATE_STOPPED);
+ mMediaSession.setActive(mediaIsActive);
mMediaSession.setQueueTitle(getString(R.string.music_now_playing));
+
+ if (mediaIsActive)
+ sendStartSessionIdIntent();
+ else
+ sendStopSessionIdIntent();
}
private void notifyTrackChanged() {
--
2.16.1
More information about the Android
mailing list