La procédure suivante vous permet de convertir votre application émettrice Android du SDK Cast v2 vers CAF Sender, qui est basé sur le CastContext CastContext.
Le SDK Cast CAF Sender utilise CastContext pour gérer GoogleAPIClient en votre nom. CastContext gère les cycles de vie, les erreurs et les rappels pour vous, ce qui simplifie considérablement le développement d'une application Cast.
Introduction
- CAF Sender est toujours distribué dans le cadre des services Google Play à l'aide du gestionnaire de SDK Android.
- De nouveaux packages ont été ajoutés pour assurer la conformité avec la checklist de conception de Google Cast (
com.google.android.gms.cast.framework.*). - CAF Sender fournit des widgets conformes aux exigences de l'expérience utilisateur Cast. La version 2 ne fournissait aucun composant d'interface utilisateur et vous obligeait à implémenter ces widgets.
- L'utilisation de GoogleApiClient n'est plus requise pour utiliser l'API Cast.
- Le sous-titrage codé dans CAF Sender est semblable à celui de la version 2.
Dépendances
Les versions 2 et CAF ont les mêmes dépendances vis-à-vis des bibliothèques d'assistance et des services Google Play services (9.2.0 ou version ultérieure), comme décrit dans le Guide des fonctionnalités de la bibliothèque d'assistance
La version minimale du SDK Android compatible avec CAF est la version 9 (Gingerbread).
Initialisation
Dans CAF, une étape d'initialisation explicite est requise pour le framework Cast. Cela implique d'initialiser le singleton CastContext à l'aide d'un OptionsProvider approprié pour spécifier l'ID de l'application Web Receiver et toute autre option globale.
public class CastOptionsProvider implements OptionsProvider {
@Override
public CastOptions getCastOptions(Context context) {
return new CastOptions.Builder()
.setReceiverApplicationId(context.getString(R.string.app_id))
.build();
}
@Override
public List<SessionProvider> getAdditionalSessionProviders(Context context) {
return null;
}
}
Déclarez OptionsProvider dans la balise "application" du fichier AndroidManifest.xml de l'application :
<application>
...
<meta-data
android:name=
"com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
android:value="com.google.sample.cast.refplayer.CastOptionsProvider" />
</application>
Dans onCreate, appelez la méthode onCreate pour lancer en douceur l'initialisation de CastContext :
private CastContext mCastContext;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.video_browser);
setupActionBar();
mCastContext = CastContext.getSharedInstance(this);
}
Ces étapes n'étaient pas nécessaires dans la version 2.
Détection d'appareils
Dans CAF, le processus de détection est démarré et arrêté automatiquement par le framework lorsque l'application passe au premier plan et à l'arrière-plan, respectivement. MediaRouteSelector et MediaRouter.Callback ne doivent pas être utilisés.
Icône Cast et boîte de dialogue Cast
Comme dans la version 2, ces composants sont fournis par la bibliothèque d'assistance MediaRouter.
L'icône Cast est toujours implémentée par MediaRouteButton et peut être ajoutée à votre activité (à l'aide d'une ActionBar ou d'une Toolbar), en tant qu'élément de menu.
<item
android:id="@+id/media_route_menu_item"
android:title="@string/media_route_menu_title"
app:actionProviderClass="android.support.v7.app.MediaRouteActionProvider"
app:showAsAction="always"/>
Dans chaque activité, remplacez la méthode onCreateOptionMenu() par CastButtonFactory pour implémenter MediaRouteButton dans le framework Cast :
private MenuItem mediaRouteMenuItem;
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.browse, menu);
mediaRouteMenuItem =
CastButtonFactory.setUpMediaRouteButton(getApplicationContext(),
menu,
R.id.media_route_menu_item);
return true;
}
Lorsqu'un utilisateur appuie sur le bouton, la boîte de dialogue Cast s'affiche automatiquement.
Contrôle des appareils
Dans CAF, le contrôle des appareils est en grande partie géré par le framework. L'application émettrice n'a pas besoin de gérer (et ne doit pas essayer de gérer) la connexion à l'appareil et le lancement de l'application Web Receiver à l'aide de GoogleApiClient. L'interaction entre l'émetteur et le Web Receiver est désormais représentée par une "session". La
SessionManager
classe gère le cycle de vie de la session et démarre et arrête automatiquement les sessions
en réponse aux gestes de l'utilisateur : une session démarre lorsque l'utilisateur sélectionne un appareil Cast
dans la boîte de dialogue Cast et se termine lorsqu'il appuie sur le bouton "Arrêter la diffusion"
dans la boîte de dialogue Cast ou lorsque l'application émettrice elle-même se termine. L'application émettrice peut être informée des événements du cycle de vie de la session en enregistrant un
SessionManagerListener
auprès du SessionManager. Les rappels SessionManagerListener définissent des méthodes de rappel pour tous les événements du cycle de vie de la session.
La
CastSession
classe représente une session avec un appareil Cast. La classe comporte des méthodes permettant de contrôler le volume de l'appareil et les états de mise en sourdine, ce qui était auparavant effectué dans la version 2 à l'aide de méthodes sur Cast.CastApi.
Dans la version 2, les
Cast.Listener
rappels fournissaient des notifications de modifications de l'état de l'appareil, y compris
le volume, l'état de mise en sourdine, l'état de veille, etc.
Dans CAF, les notifications de modification de l'état du volume/de la mise en sourdine sont toujours fournies via des méthodes de rappel
dans les Cast.Listener. Ces écouteurs sont enregistrés auprès de
CastSession.
Toutes les autres notifications d'état de l'appareil sont fournies via
CastStateListener
des rappels. Ces écouteurs sont enregistrés auprès de CastSession. Assurez-vous de toujours annuler l'enregistrement des écouteurs lorsque les fragments, activités ou applications associés passent à l'arrière-plan.
Logique de reconnexion
Comme pour la version 2, CAF tente de rétablir les connexions réseau perdues en raison d'une perte temporaire du signal Wi-Fi ou d'autres erreurs réseau. Cette opération est désormais effectuée au niveau de la session. Une session peut passer à l'état "suspendu" lorsque la connexion est perdue, puis revenir à l'état "connecté" lorsque la connectivité est rétablie. Le framework se charge de se reconnecter à l'application Web Receiver et de reconnecter tous les canaux Cast dans le cadre de ce processus.
De plus, CAF ajoute également la reprise automatique de la session, qui est activée par
défaut (et peut être désactivée via
CastOptions.
Si l'application émettrice est envoyée à l'arrière-plan ou est arrêtée (en
la balayant ou en raison d'un plantage) pendant qu'une session Cast est en cours, le
framework tente de reprendre cette session lorsque l'application émettrice
revient au premier plan ou est relancée. Cette opération est gérée automatiquement par le
SessionManager, qui émet les rappels appropriés sur toutes les instances
SessionManagerListener enregistrées.
Enregistrement de canaux personnalisés
Dans la version 2, les canaux personnalisés (implémentés à l'aide de
Cast.MessageReceivedCallback)
sont enregistrés auprès de Cast.CastApi. Dans CAF, les canaux personnalisés sont plutôt enregistrés auprès de l'instance CastSession. L'enregistrement peut être effectué dans la
SessionManagerListener.onSessionStarted
méthode de rappel. Pour les applications multimédias, il n'est plus nécessaire d'enregistrer explicitement le canal de commande multimédia via Cast.CastApi.setMessageReceivedCallbacks. Pour en savoir plus, consultez la section suivante.
Commande multimédia
La classe de la version 2
RemoteMediaPlayer
est obsolète et ne doit pas être utilisée. Dans CAF, elle est remplacée par la nouvelle
RemoteMediaClient
classe, qui fournit des fonctionnalités équivalentes dans une API plus pratique. Il n'est pas nécessaire d'initialiser ou d'enregistrer explicitement cet objet. Le framework instancie automatiquement l'objet et enregistre le canal multimédia sous-jacent au début de la session si l'application Web Receiver à laquelle il est connecté est compatible avec l'espace de noms multimédia.
Le RemoteMediaClient peut être accédé en tant que
getRemoteMediaClient méthode de l'objet CastSession.
Dans la version 2, toutes les requêtes multimédias émises sur le RemoteMediaPlayer renvoyaient un
RemoteMediaPlayer.MediaChannelResult via un rappel PendingResult.
Dans CAF, toutes les requêtes multimédias émises sur le RemoteMediaClient renvoient un
RemoteMediaClient.MediaChannelResult
via un
PendingResult
rappel qui peut être utilisé pour suivre la progression et le résultat final de la
requête.
La version 2 RemoteMediaPlayer envoyait des notifications concernant les modifications de l'état du lecteur
multimédia sur le Web Receiver via le
RemoteMediaPlayer.OnStatusUpdatedListener.
Dans CAF, le RemoteMediaClient fournit des rappels équivalents via son
RemoteMediaClient.Listener
interface. Vous pouvez enregistrer n'importe quel nombre d'écouteurs auprès de RemoteMediaClient, ce qui permet à plusieurs composants émetteurs de partager l'instance unique de RemoteMediaClient associée à la session.
Dans la version 2, l'application émettrice devait se charger de synchroniser l'interface utilisateur avec l'état du lecteur multimédia sur le Web Receiver.
Dans CAF, la classe
UIMediaController
assume la majeure partie de cette responsabilité.
Message d'annonce en superposition
La version 2 ne fournit pas d'interface utilisateur de message d'annonce en superposition.
CAF fournit une vue personnalisée
IntroductoryOverlay
pour mettre en évidence l'icône Cast lorsqu'elle s'affiche pour la première fois pour les utilisateurs.
Mini-télécommande
Dans la version 2, vous devez implémenter une mini-télécommande de A à Z dans l'application émettrice.
Dans CAF, le SDK fournit une vue personnalisée,
MiniControllerFragment,
que vous pouvez ajouter au fichier de mise en page des activités pour lesquelles
vous souhaitez afficher la mini-télécommande.
Notifications et écran de verrouillage
Dans la version 2, les contrôleurs de notification et d'écran de verrouillage ne sont pas fournis par le SDK. Pour ce SDK, vous devez intégrer ces fonctionnalités à votre application émettrice à l'aide des API du framework Android.
Dans CAF, le SDK fournit un
NotificationsOptions.Builder
pour vous aider à intégrer des commandes multimédias pour la notification et l'écran de verrouillage
dans l'application émettrice. Les commandes accessibles au niveau de la notification et de l'écran de verrouillage peuvent être activées
avec les
CastOptions
lors de l'initialisation de CastContext.
public CastOptions getCastOptions(Context context) {
NotificationOptions notificationOptions = new NotificationOptions.Builder()
.setTargetActivityClassName(VideoBrowserActivity.class.getName())
.build();
CastMediaOptions mediaOptions = new CastMediaOptions.Builder()
.setNotificationOptions(notificationOptions)
.build();
return new CastOptions.Builder()
.setReceiverApplicationId(context.getString(R.string.app_id))
.setCastMediaOptions(mediaOptions)
.build();
}
Télécommande agrandie
Dans la version 2, vous devez implémenter une télécommande agrandie de A à Z dans l'application émettrice.
CAF fournit une classe d'assistance
UIMediaController
qui vous permet de créer facilement votre propre télécommande agrandie.
CAF ajoute un widget de télécommande agrandie prédéfini
ExpandedControllerActivity
que vous pouvez simplement ajouter à votre application. Vous n'avez plus besoin d'
implémenter une télécommande agrandie personnalisée à l'aide de UIMediaController.
Priorité audio
Dans la version 2, vous devez utiliser MediaSessionCompat pour gérer la priorité audio.
Dans CAF, la priorité audio est gérée automatiquement.
Consignation des données de débogage
Dans CAF, il n'existe aucune option de journalisation.
Applications exemples
Nous proposons des tutoriels d'ateliers de programmation et des exemples d'applications qui utilisent CAF.
pour utiliser CastContext.