2016-10-10 2 views

답변

4

VolumeProviderCompat으로 MediaSessionCompat을 작성하면됩니다.

다음
// Here is a volume provider which sets the volume of a remote route. 
// Extend VolumeProviderCompat with your own implementation. 
public static class RemoteVolume extends VolumeProviderCompat { 
    public RemoteVolume(MediaRouter.RouteInfo routeInfo) { 
     super(VolumeProviderCompat.VOLUME_CONTROL_ABSOLUTE, STEPS, 0); 
     this.stepSize = routeInfo.getVolumeMax()/STEPS; 
     this.routeInfo = routeInfo; 
    } 

    @Override 
    public void onSetVolumeTo(int volume) { 
     routeInfo.requestSetVolume(volume * stepSize); 
     setCurrentVolume(volume); 
    } 

    @Override 
    public void onAdjustVolume(int delta) { 
     int newVolume = getCurrentVolume() + delta; 
     routeInfo.requestSetVolume(newVolume * stepSize); 
     setCurrentVolume(newVolume); 
    } 
} 

, 연결 VolumeProviderCompat 당신의 MediaSessionCompat에 : 델타 0 어떤 생각이 왜 불려 onAdjustVolume 볼륨 키를 사용하여

MediaSessionCompat session = new MediaSessionCompat(context, TAG); 

// might need some of these flags 
session.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS | 
      MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS | 
      MediaSessionCompat.FLAG_HANDLES_QUEUE_COMMANDS); 

// the volume buttons are routed to this session when it is 
// active and currently playing 
session.setPlaybackState(new PlaybackStateCompat.Builder() 
     .setState(PlaybackStateCompat.STATE_PLAYING, 0, 1.0f) 
     .build()); 

session.setActive(true); 

// The media router tries to bind its own VolumeProvider which kinda 
// works. We need to unbind the one provided and put ours in. 
router.setMediaSessionCompat(session); 
session.setPlaybackToRemote(new RemoteVolume(myRemoteRoute)); 
+0

? 캐스트 대화 상자를 사용하여 볼륨을 변경할 때 잘 작동합니다. – ingsaurabh

+0

현재 볼륨을 업데이트하기 위해 호출 될 수 있습니다. 그것은 한 번 이상 일어나는가? – 0xcaff

+0

또한 'STEPS'는 0이 아니어야합니다. – 0xcaff