2016-07-31 12 views
6

Mam wbudowanego niestandardowego nadawcy w mojej aplikacji, który działa idealnie - jedyną funkcją, którą muszę dodać, jest sposób na słuchanie "Odtwórz/wstrzymaj" i "Pomiń" przyciski, ale dokumentacja Google (o ile byłem w stanie sprawdzić) nie daje żadnych wskazówek, a po dodaniu funkcjonalności pokazany w Advanced Cast Features Docs nie działa:Jak przechwytywać kliknięcia UIMediaController za pomocą interfejsu sterowania castingiem

CastMediaOptions castMediaOptions = new CastMediaOptions.Builder() 
    .setMediaIntentReceiverClassName(CastIntentReceiver.class.getName()) 
    .build(); 

return new CastOptions.Builder() 
     .setReceiverApplicationId(context.getString(R.string.cast_id)) 
     .setCastMediaOptions(castMediaOptions) 
     .build(); 

mam CastIntentReceiver który rozciąga MediaIntentReceiver, o którym mowa w CastOptionsProvider i w manifeście.

public class CastIntentReceiver extends MediaIntentReceiver { 

    public static String TAG = "CastIntentReceiver"; 

    public CastIntentReceiver() { 
     Log.i(TAG, "CastIntentReceiver: Constructed!"); 
    } 
    ... 
    // The rest of the Override methods don't do anything 

} 

Odbiornik pracuje, ponieważ wydruk dziennika działa, ale żadna z metod nadpisywania nazywa (nie drukowanie dziennika).

Oto kilka dodatkowych szczegółów na temat mojej realizacji:

Wszystkie funkcje odlewania w dwóch oddzielnych klasach, które dodaje się do podstawy główną działalność View CastManager (kontroler) i fragment CastControls (zobacz) (podobny na YouTube). Istnieją również interfejsy, które wyzwalają rzeczy między tymi dwiema klasami.

W CastManager, ja SETUP UIMediaController i wiążą Odwiedzin:

View view = CastingBridge.CAST_CONTROLS_VIEW.findViewById(R.id.cast_drawer_controls); 

uiMediaController = new UIMediaController(activity); 
SeekBar seekBar = (SeekBar) view.findViewById(R.id.cast_control_seek_bar); 
TextView start = (TextView) view.findViewById(R.id.cast_control_time_start); 
TextView end = (TextView) view.findViewById(R.id.cast_control_time_end); 
ImageButton playPauseButton = (ImageButton) view.findViewById(R.id.cast_control_play_pause); 
ImageButton rewindButton = (ImageButton) view.findViewById(R.id.cast_control_rewind); 
ImageButton forwardButton = (ImageButton) view.findViewById(R.id.cast_control_forward); 
ImageButton stopButton = (ImageButton) view.findViewById(R.id.cast_control_stop); 
ProgressBar loadingSpinner = (ProgressBar) view.findViewById(R.id.cast_control_loading); 

Jak stwierdzono wcześniej, wszystkie te prace, jak powinny, ale muszę słuchać (przechwytywania) w dotyku/kliknij wydarzenia tak, że gdy film zostanie zatrzymany lub zatrzymany, mogę zapisać bieżącą długość zegarka do wznowienia.

Jak wdrożyć MediaIntentReceiver, aby odsłuchać te wydarzenia? Próbowałem dodawać detektory kliknięć do poszczególnych widoków, ale zgodnie z oczekiwaniami, @Override onClick usuwa początkową zamierzoną funkcjonalność.

The documentation określa, co wydaje się być metodami, których potrzebuję, ale jak to się odnosi?

Próbowałem też dodanie jedyną dostępną słuchacza UIMediaController:

uiMediaController.setPostRemoteMediaClientListener(new RemoteMediaClient.Listener() { 
    @Override 
    public void onStatusUpdated() { 
     Log.i(TAG, "onStatusUpdated: Status Updated"); 
    } 
}); 

To jednak nic nie robi, jak metoda onStatusUpdated dostarcza żadnych argumentów.

Czy ktoś może mi pomóc rzucić trochę światła na to? Próbowałem różnych rzeczy i szukałem kilku dni, więc czas poprosić o pomoc.

Dzięki!

Odpowiedz

3

Określony odbiornik (i ogólnie MediaIntentReceiver) służy do obsługi działań z powiadomienia, ekranu blokady i okna przesyłania; więc posiadanie niestandardowego wpływa na zachowanie, gdy jest inicjowane z tych miejsc. Jeśli korzystasz z UIMediaController, musisz użyć onSendingRemoteMediaRequest(), aby otrzymać powiadomienie, gdy użytkownik wejdzie w interakcję z tymi kontrolkami.

+0

Dzięki za odpowiedź. Zaimplementowałem to i faktycznie działa, ale metoda onStatusUpdated nie zawiera żadnych argumentów. Jak mogę się dowiedzieć, który przycisk (z trzech używanych) został faktycznie kliknięty? – mwieczorek