2013-07-18 2 views
6

Ich baue gerade eine Streaming-Android-App und versuche, einen Fernsteuerungs-Client zu integrieren (um beispielsweise ein Steuerelement vom Sperrbildschirm zu haben) auf ICS +).Seltsam blinkend auf dem Sperrbildschirm-Fernsteuerungs-Client, wenn es vom Client selbst gestoppt wird

so zu tun, ich bin, dass in meinem Streaming-Dienst beim Start tun:

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 ist einfach eine Instanz von RemoteControlClientCompat aus den Proben.

dann aktualisiere ich während des Streamings die Metadaten. Alles funktioniert normal, sogar die Steuerelemente werden an meine RemoteControlReceiver gesendet. Die Daten und das Bild erscheinen auf dem Sperrbildschirm.

Durch das Stoppen des Streams von meiner App wird die Sperrbildschirm-Sache zerstört, aber wenn ich versuche, sie vom Widget selbst zu zerstören (indem ich die Stopp-Taste drücke), macht es etwas seltsam. Durch Drücken der Stopptaste stoppt der Rundfunkempfänger meinen Streaming-Dienst. Dann in den Dienst des onDestroy() -Methode, ich bin, das zu tun:

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

Das Widget geht so schnell blinken wie audioManager.unregisterMediaButtonEventReceiver(mediaButtonReceiverComponent); genannt wird. Ich habe versucht, die Zeile zu kommentieren und das Blinken geschieht mit audioManager.abandonAudioFocus(this);. Das Kommentieren dieser anderen Zeile lässt es ebenfalls blinken, wenn der Dienst stoppt.

Ich habe bemerkt, dass dies auch passiert, wenn ich das Streaming von meiner Benachrichtigung stoppe.

Was mache ich falsch? Ich habe versucht, die Reihenfolge dieser Anrufe zu ändern, aber ich konnte es nicht lösen. Ich habe bemerkt, Spotify hatte das gleiche Problem ein paar Versionen vor. Ich frage mich, wie sie es gelöst haben ...

Antwort

4

Ok, ich habe es behoben. Das liegt einfach daran, dass der RemoteControlClient nicht abgespielt werden kann, wenn wir den Audiofokus verlassen. Also musste ich das einfach anrufen, bevor ich irgendetwas zerstörte:

remoteControlClientCompat.setPlaybackState(RemoteControlClient.PLAYSTATE_PAUSED); 
Verwandte Themen