J'ai intégré un expéditeur de distribution personnalisé dans mon application qui fonctionne parfaitement - la seule fonctionnalité que je dois ajouter est un moyen d'écouter les fonctions "Lecture/Pause" et "Ignorer" boutons, mais la documentation de Google (pour autant que je suis en mesure de rechercher) ne donne pas d'indices, et après avoir ajouté la fonctionnalité indiqué dans Advanced Cast Features Docs ne fonctionne pas:Comment capturer les clics de UIMediaController via l'interface de contrôle de diffusion
CastMediaOptions castMediaOptions = new CastMediaOptions.Builder()
.setMediaIntentReceiverClassName(CastIntentReceiver.class.getName())
.build();
return new CastOptions.Builder()
.setReceiverApplicationId(context.getString(R.string.cast_id))
.setCastMediaOptions(castMediaOptions)
.build();
J'ai un CastIntentReceiver
qui va MediaIntentReceiver
référencé dans CastOptionsProvider
et dans le manifeste.
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
}
Le récepteur fonctionne, car le journal d'impression fonctionne, mais aucune des méthodes de Override sont appelés (pas l'impression du journal).
Voici quelques détails supplémentaires sur ma mise en œuvre:
Toutes les fonctions de coulée sont dans deux classes distinctes, le CastManager (contrôleur) et le fragment de CastControls (vue) qui est ajouté à la base de la MainActivity View (similaire à YouTube). Il y a aussi des Interfaces qui déclenchent des choses entre ces deux classes.
Dans le CastManager, je configurer les UIMediaController
et se lient Vues:
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);
Comme indiqué précédemment, tous ces travaux comme ils le devraient, mais je dois écouter (capture) au toucher/cliquer événements afin que lorsqu'une vidéo est en pause ou arrêtée, je peux enregistrer la durée de la montre en cours à des fins de reprise.
Comment implémenter MediaIntentReceiver
pour écouter ces événements? J'ai essayé d'ajouter des écouteurs de clic aux vues individuelles, mais comme prévu, @Override onClick
supprime la fonctionnalité initiale prévue.
Le documentation spécifie les méthodes dont j'ai besoin, mais comment est-ce référencé?
J'ai aussi essayé d'ajouter le seul auditeur disponible à UIMediaController
:
uiMediaController.setPostRemoteMediaClientListener(new RemoteMediaClient.Listener() {
@Override
public void onStatusUpdated() {
Log.i(TAG, "onStatusUpdated: Status Updated");
}
});
Cela ne signifie toutefois pas faire quoi que ce soit, la méthode onStatusUpdated
fournit pas d'arguments.
Quelqu'un peut-il m'aider à faire la lumière là-dessus? J'ai essayé différentes choses et cherché pendant quelques jours maintenant, donc le temps de demander de l'aide.
Merci!
Merci pour votre réponse. J'ai implémenté ceci, et il fonctionne bien, mais la méthode onStatusUpdated est sans arguments. Comment pourrais-je savoir quel bouton (sur les trois en cours d'utilisation) a été cliqué? – mwieczorek