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!
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