2016-07-31 4 views
6

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!

Répondre

3

Le récepteur que vous avez défini (et MediaIntentReceiver en général) est utilisé pour gérer les actions de notification, lockscreen et cast cast; donc avoir une coutume affecte le comportement quand il est initié à partir de ces endroits. Si vous utilisez UIMediaController, vous devez utiliser onSendingRemoteMediaRequest() pour être averti lorsque l'utilisateur interagit avec ces contrôles.

+0

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