2013-07-18 3 views
6

현재 스트리밍 안드로이드 앱을 만들고 원격 제어 클라이언트를 통합하려고합니다 (예를 들어 잠금 화면의 컨트롤 ICS +). 클라이언트 자체에서 멈추었을 때 잠금 화면 원격 제어 클라이언트가 이상하게 깜박임

내가 내 스트리밍 서비스의 시작에서 그 일을 해요, 이렇게하려면 다음

int result = audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); 

    if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { 
     stopSelf(); 
    } 

    mediaButtonReceiverComponent = new ComponentName(this, RemoteControlReceiver.class); 
    audioManager.registerMediaButtonEventReceiver(mediaButtonReceiverComponent); 

    if (remoteControlClientCompat == null) { 
     final Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON); 
     mediaButtonIntent.setComponent(mediaButtonReceiverComponent); 
     remoteControlClientCompat = new RemoteControlClientCompat(
       PendingIntent.getBroadcast(
         getApplicationContext(), 
         0, 
         mediaButtonIntent, 
         PendingIntent.FLAG_UPDATE_CURRENT 
       ) 
     ); 
     RemoteControlHelper.registerRemoteControlClient(audioManager, remoteControlClientCompat); 
    } 

    final int flags = RemoteControlClient.FLAG_KEY_MEDIA_STOP; 
    remoteControlClientCompat.setTransportControlFlags(flags); 

remoteControlClientCompat 단순히 샘플에서 RemoteControlClientCompat의 인스턴스입니다.

스트리밍 중 메타 데이터를 업데이트하고 있습니다. 모든 것이 정상적으로 작동하고 있어도 컨트롤이 내 RemoteControlReceiver으로 전송됩니다. 데이터와 이미지는 잠금 화면에 잘 나타납니다.

내 앱에서 스트리밍을 중지하면 화면 잠금이 해제되지만 위젯 자체에서 버튼을 눌러 위젯을 삭제하려고 할 때 이상한 일을합니다. 정지 버튼을 누르면 방송 수신기가 내 스트리밍 서비스를 중단합니다. 그런 다음 서비스의들의 OnDestroy() 메소드에, 내가 그 일을 해요 :

RemoteControlHelper.unregisterRemoteControlClient(audioManager, remoteControlClientCompat); 
    audioManager.unregisterMediaButtonEventReceiver(mediaButtonReceiverComponent); 
    audioManager.abandonAudioFocus(this); 

위젯은 즉시 audioManager.unregisterMediaButtonEventReceiver(mediaButtonReceiverComponent);가 호출 점멸 간다. 줄을 주석 처리하려고 시도했는데 깜박임은 audioManager.abandonAudioFocus(this);으로 발생합니다. 서비스가 중단 될 때 다른 행이 깜박이는 것을 주석 처리합니다.

내 알림에서 스트리밍을 중지 할 때도 이와 같은 현상이 발생했습니다.

내가 뭘 잘못하고 있니? 이 호출의 순서를 변경하려고 시도했지만 해결할 수 없었습니다. Spotify에서 몇 가지 버전과 똑같은 문제가 발생했습니다. 나는 그들이 그것을 어떻게 해결했는지 궁금 하네 ...

답변

4

Ok 나는 그것을 고쳤다. 오디오 포커스를 포기할 때 RemoteControlClient를 재생할 수 없기 때문입니다. 그래서 나는 무엇이든을 파괴하기 전에 그것을 불러야 만했습니다 :

remoteControlClientCompat.setPlaybackState(RemoteControlClient.PLAYSTATE_PAUSED);