La procédure suivante vous permet de convertir votre application émettrice Android de Cast du SDK v2 vers CAF Sender, qui est basé sur le CastContext singleton.
Le SDK Cast CAF Sender utilise CastContext pour gérer le client GoogleAPIClient en votre nom. CastContext gère pour vous les cycles de vie, les erreurs et les rappels, ce qui permet simplifie le développement d'une application Cast.
Introduction
- L'expéditeur CAF est toujours distribué dans le cadre des services Google Play à l'aide d'Android SDK Manager
- De nouveaux packages ont été ajoutés. Ils sont chargés de respecter
Checklist de conception pour Google Cast (
com.google.android.gms.cast.framework.*
) - CAF Sender fournit des widgets conformes aux exigences de l'expérience utilisateur Cast. v2 ne fournissait aucun composant d'interface utilisateur et vous obligeait à les implémenter widgets.
- L'utilisation de GoogleApiClient n'est plus nécessaire pour utiliser l'API Cast.
- Le sous-titrage dans CAF Sender est semblable à celui de la version 2.
Dépendances
Les versions 2 et CAF dépendent des mêmes dépendances sur les bibliothèques Support et sur Google Play (9.2.0 ou version ultérieure), comme décrit sur la page Fonctionnalités de la bibliothèque Support Guide
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. Ce
consiste à initialiser
CastContext
singleton, à l'aide d'une méthode
OptionsProvider
pour spécifier l'ID d'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éclarer OptionsProvider
dans l'"application" tag de l'application
Fichier AndroidManifest.xml
:
<application>
...
<meta-data
android:name=
"com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
android:value="com.google.sample.cast.refplayer.CastOptionsProvider" />
</application>
Initialisez de manière différée CastContext
dans la méthode onCreate
de chaque activité:
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écouverte est lancé et arrêté automatiquement par
quand l'application passe au premier plan et en arrière-plan,
respectivement. MediaRouteSelector
et MediaRouter.Callback
ne doivent pas être
utilisé.
Icône Cast et boîte de dialogue "Caster"
Comme dans la version 2, ces composants sont fournis par le support bibliothèque.
L'icône Cast est toujours implémentée par
MediaRouteButton
et peuvent être ajoutées à votre activité (à l'aide d'un
ActionBar
ou un
Toolbar
),
en tant qu'élément de menu dans votre 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"/>
Remplacez la méthode onCreateOptionMenu()
de chaque activité en utilisant
CastButtonFactory
pour connecter MediaRouteButton
au 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;
}
Lorsque quelqu'un appuie sur le bouton, la boîte de dialogue "Caster" s'affiche automatiquement.
Contrôle des appareils
Dans CAF, le contrôle des appareils est largement géré par le framework. L'expéditeur
application n'a pas besoin de gérer (et ne devrait pas essayer de gérer) la connexion à
l'appareil et en lançant l'application Web Receiver à l'aide de
GoogleApiClient
L'interaction entre l'expéditeur et le récepteur Web est désormais représentée
en tant que "session". La
SessionManager
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.
appareil dans la boîte de dialogue "Caster" et s'arrête lorsque l'utilisateur appuie sur "Arrêter la diffusion"
dans la boîte de dialogue Cast ou lorsque l'application émettrice s'arrête. L'expéditeur
application peut être avertie des événements de cycle de vie d'une session en enregistrant un
SessionManagerListener
avec le SessionManager
. Les rappels SessionManagerListener
définissent
de rappel pour tous les événements de cycle de vie d'une session.
La
CastSession
représente une session avec un appareil Cast. La classe a des méthodes pour
Contrôler le volume de l'appareil et couper le son (auparavant effectué dans la version 2)
à l'aide de méthodes sur Cast.CastApi
.
Dans la version 2,
Cast.Listener
fournissaient des notifications en cas de changement de l'état de l'appareil, y compris
volume, coupure du son, veille, etc.
Dans CAF, les notifications de changement d'état du volume ou du son sont toujours envoyées par rappel
dans Cast.Listener
. ces écouteurs sont enregistrés
CastSession
Toutes les autres notifications d'état de l'appareil sont envoyées via
CastStateListener
Rappels ces écouteurs sont enregistrés auprès de CastSession
. Assurez-vous que
mais l'enregistrement des écouteurs est toujours annulé lorsque les fragments, les activités ou les applications associés
en arrière-plan.
Logique de reconnexion
Comme dans la version 2, CAF tente de rétablir les connexions réseau qui sont perdus en raison d'une perte temporaire du signal Wi-Fi ou d'autres erreurs réseau. C'est maintenant au niveau de la session ; une session peut indiquer "suspendue" indiquer que la connexion est perdue et va revenir à une connexion « connectée » indiquer quand la connectivité est rétablie. Le framework se charge de se reconnecter au Application Web Receiver et reconnecter tous les canaux Cast dans le cadre de ce processus.
De plus, CAF ajoute aussi la reprise de session
automatique qui est activée par
par défaut (et peuvent être désactivées via
CastOptions
Si l'application émettrice est envoyée en arrière-plan ou arrêtée (par
un balayage ou à cause d'un plantage) pendant qu'une session Cast est en cours, l'icône
le framework tente de la relancer lorsque l'application émettrice
revient au premier plan ou est relancé ; cette opération est gérée automatiquement
SessionManager
, qui émet les rappels appropriés sur toutes les instances
SessionManagerListener
instances.
Enregistrement d'un critère personnalisé
Dans la version 2, les critères personnalisés (implémentés via
Cast.MessageReceivedCallback
)
sont enregistrés auprès de Cast.CastApi
. Dans CAF, les critères personnalisés sont enregistrés
Instance CastSession
. L'enregistrement peut être effectué dans la
SessionManagerListener.onSessionStarted
. Pour les applications multimédias, il n'est plus nécessaire
enregistrer le canal Media Control via Cast.CastApi.setMessageReceivedCallbacks
;
consultez la section suivante pour en savoir plus.
Commande multimédia
La classe v2
RemoteMediaPlayer
est obsolète et ne doit pas être utilisée. Dans CAF, il est remplacé par le nouveau
RemoteMediaClient
, qui fournit des fonctionnalités équivalentes dans une API plus pratique. Il est
il n'est pas nécessaire d'initialiser ni d'enregistrer explicitement cet objet ; le cadre
instancie automatiquement l'objet et enregistre le contenu multimédia sous-jacent
canal au début de la session si l'application Web Receiver est connectée
prend en charge l'espace de noms multimédia.
Le RemoteMediaClient
est accessible en tant que
Méthode getRemoteMediaClient
de l'objet CastSession
.
Dans la version 2, toutes les requêtes média émises sur RemoteMediaPlayer
renvoyaient une
RemoteMediaPlayer.MediaChannelResult
via un rappel PendingResult
.
Dans CAF, toutes les requêtes média émises sur RemoteMediaClient
renvoient un
RemoteMediaClient.MediaChannelResult
via un
PendingResult
qui permet de suivre la progression et le résultat final
requête.
La version 2 de RemoteMediaPlayer
enverrait des notifications concernant les modifications apportées aux contenus multimédias
l'état du lecteur sur le Web Receiver via la
RemoteMediaPlayer.OnStatusUpdatedListener
Dans CAF, RemoteMediaClient
fournit des rappels équivalents via son
RemoteMediaClient.Listener
de commande. Vous pouvez enregistrer autant d'écouteurs que vous le souhaitez
RemoteMediaClient
, qui permet à plusieurs composants expéditeurs de partager le
instance unique de RemoteMediaClient
associée à la session.
Dans la version 2, l'application émettrice devait assurer la protection de l'utilisateur l'interface est synchronisée avec l'état du lecteur multimédia sur Web Receiver.
Dans CAF, la classe
UIMediaController
assume l'essentiel de ces responsabilités.
Message d'annonce en superposition
La version 2 ne fournit pas d'interface utilisateur en superposition d'introduction.
CAF fournit une vue personnalisée
IntroductoryOverlay
pour mettre en surbrillance l'icône Cast lorsqu'elle s'affiche pour la première fois.
Mini-télécommande
Dans la version 2, vous devez implémenter une mini-télécommande à partir de zéro dans l'application émettrice.
Dans CAF, le SDK fournit une vue personnalisée,
MiniControllerFragment
que vous pouvez ajouter au fichier de mise en page de l'application des activités dans lesquelles
vous voulez montrer la mini-télécommande.
Notifications et écran de verrouillage
Dans la version 2, les contrôleurs de notification et de verrouillage de l'écran ne sont pas fournis par le SDK. Pour ce SDK, vous devez intégrer ces fonctionnalités à votre application émettrice à l'aide de la méthode API du framework Android.
Dans CAF, le SDK fournit
NotificationsOptions.Builder
pour vous aider à concevoir des commandes multimédias pour les notifications et l'écran de verrouillage
dans l'application émettrice. Vous pouvez activer les commandes relatives aux notifications et à l'écran de verrouillage
avec le
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 un contrôleur étendu en partant de zéro dans l'application émettrice.
CAF fournit une
UIMediaController
qui vous permet de créer facilement votre propre
contrôleur.
CAF ajoute un widget de télécommande étendu prédéfini
ExpandedControllerActivity
que vous pouvez simplement ajouter à votre application. Vous n'avez plus besoin de
implémenter un contrôleur étendu personnalisé à 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
Il n'existe aucune option de journalisation dans CAF.
Applications exemples
Nous avons tutoriels de l'atelier de programmation et applications exemples qui utilisent CAF.