I am using cast SDK v3 in my android sender app it is working good but the volume controls button doesn't control the casting device's volume by default. I have to expand the volume controls popup and adjust the casting device volume. It is directly controlling the device's volume when cast session resumes. But it loses focus once playback state is changed.
private class CastSessionManagerListener implements SessionManagerListener<CastSession> {
@Override
public void onSessionStarting(CastSession session) {
}
@Override
public void onSessionStarted(CastSession session, String sessionId) {
// In case we are casting, send the device name as an extra on MediaSession metadata.
// Now we can switch to CastPlayback
EventHelper.eventFeatureClicked(EventHelper.FEATURE_CHROME_CAST);
Playback playback = new CastPlayback(MusicService.this);
mMediaRouter.setMediaSessionCompat(mSession);
mPlaybackManager.switchToPlayback(playback, true);
}
@Override
public void onSessionStartFailed(CastSession session, int error) {
}
@Override
public void onSessionEnding(CastSession session) {
// This is our final chance to update the underlying stream position
// In onSessionEnded(), the underlying CastPlayback#mRemoteMediaClient
// is disconnected and hence we update our local value of stream position
// to the latest position.
mPlaybackManager.getPlayback().updateLastKnownStreamPosition();
}
@Override
public void onSessionEnded(CastSession session, int error) {
Playback playback = new LocalPlayback(MusicService.this);
mMediaRouter.setMediaSessionCompat(null);
mPlaybackManager.switchToPlayback(playback, true);
}
@Override
public void onSessionResuming(CastSession session, String sessionId) {
}
@Override
public void onSessionResumed(CastSession session, boolean wasSuspended) {
EventHelper.eventFeatureClicked(EventHelper.FEATURE_CHROME_CAST);
Playback playback = new CastPlayback(MusicService.this);
mMediaRouter.setMediaSessionCompat(mSession);
mPlaybackManager.switchToPlayback(playback, true);
}
@Override
public void onSessionResumeFailed(CastSession session, int error) {
}
@Override
public void onSessionSuspended(CastSession session, int reason) {
}
}
I believe this happens if your
MediaSession
orMediaSessionCompat
is set to active. When casting or when playback is remote, it should be made inactive.