2013-07-18 15 views
6

Aktualnie tworzę aplikację do strumieniowej transmisji na Androida i próbuję zintegrować klienta zdalnego sterowania (np. Mieć kontrolę na ekranie blokady w ICS +).Dziwne mruganie na ekranie klienta zdalnego sterowania zamkiem po zatrzymaniu go od samego klienta

Aby to zrobić, robię to na uruchomienie w moim usługi transmisji strumieniowej:

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 jest po prostu instancją RemoteControlClientCompat z próbek.

, a następnie podczas przesyłania strumieniowego aktualizuję metadane. wszystko działa normalnie, nawet kontrolki są wysyłane do mojego RemoteControlReceiver. Dane i obraz wyglądają ładnie na ekranie blokady.

Zatrzymanie przesyłania strumieniowego z mojej aplikacji niszczy blokadę ekranu, ale gdy próbuję ją zniszczyć z samego widgetu (naciskając przycisk stop), robi się coś dziwnego. Naciśnięcie przycisku stop powoduje, że odbiornik transmisji zatrzymuje moją usługę przesyłania strumieniowego. Następnie w metodzie dla usługi onDestroy(), robię to:

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

widżet idzie miga jak najszybciej audioManager.unregisterMediaButtonEventReceiver(mediaButtonReceiverComponent); nazywa. Próbowałem komentować linię, a migotanie dzieje się z audioManager.abandonAudioFocus(this);. Komentowanie, że inna linia sprawia, że ​​również miga, gdy usługa się zatrzymuje.

Zauważyłem, że tak się dzieje, gdy przerywa przesyłanie strumieniowe z mojego powiadomienia.

Co robię źle? Próbowałem zmienić kolejność połączeń, ale nie mogłem go rozwiązać. Zauważyłem, że Spotify miał dokładnie ten sam problem kilka wersji temu. Zastanawiam się, jak to rozwiązali ...

Odpowiedz

4

OK Naprawiłem. Jest tak po prostu dlatego, że RemoteControlClient nie może być odtwarzany, gdy porzucimy fokus audio. Musiałem więc zadzwonić, zanim cokolwiek zniszczyłem:

remoteControlClientCompat.setPlaybackState(RemoteControlClient.PLAYSTATE_PAUSED); 
Powiązane problemy