Partager via


Caractéristiques de Méduse

Ce document fournit une vue d’ensemble générale des nouvelles fonctionnalités pour les développeurs qui ont été introduites dans Android 4.1. Ces fonctionnalités incluent : notifications améliorées, mises à jour d’Android Beam pour partager des fichiers volumineux, mises à jour de la découverte multimédia, de la découverte du réseau pair à pair, des animations, de nouvelles autorisations.

Vue d’ensemble

Android 4.1 (API Level 16), également appelé « Jelly Bean », a été publié le 9 juillet 2012. Cet article fournit une présentation générale de certaines des nouvelles fonctionnalités d’Android 4.1 pour les développeurs utilisant Xamarin.Android. Certaines de ces nouvelles fonctionnalités introduites sont des améliorations apportées aux animations pour lancer une activité, de nouveaux sons pour une caméra et une prise en charge améliorée de la navigation dans la pile d’applications. Il est désormais possible de couper et coller avec des intentions.

La stabilité des applications Android est améliorée avec la possibilité d’isoler la dépendance vis-à-vis des fournisseurs de contenu instables. Les services peuvent également être isolés afin qu’ils soient accessibles uniquement par l’activité qui les a démarrées.

La prise en charge a été ajoutée pour la découverte de services réseau à l’aide de Bonjour, UPnP ou de services DNS multidiffusion. Il est désormais possible d’obtenir des notifications plus riches qui ont mis en forme du texte, des boutons d’action et des images volumineuses.

Enfin, plusieurs nouvelles autorisations ont été ajoutées dans Android 4.1.

Spécifications

Pour développer des applications Xamarin.Android à l’aide de Jelly Bean, vous devez installer Xamarin.Android.Android 4.2.6 ou version ultérieure et Android 4.1 (niveau d’API 16) via le Gestionnaire du Kit de développement logiciel (SDK) Android, comme indiqué dans la capture d’écran suivante :

Sélection d’Android 4.1 dans le Gestionnaire du Kit de développement logiciel (SDK) Android

Nouveautés

Animations

Les activités peuvent être lancées à l’aide d’animations de zoom ou d’animations personnalisées à l’aide de la ActivityOptions classe. Les nouvelles méthodes suivantes sont fournies pour prendre en charge ces animations :

  • MakeScaleUpAnimation : crée une animation qui augmente la taille d’une fenêtre d’activité à partir d’une position de démarrage et d’une taille sur l’écran.
  • MakeThumbnailScaleUpAnimation : crée une animation qui augmente à partir d’une image miniature à partir d’une position spécifiée sur l’écran.
  • MakeCustomAnimation : crée une animation à partir de ressources dans l’application. Une animation s’affiche lorsque l’activité s’ouvre et une autre lorsque l’activité s’arrête.

La nouvelle TimeAnimator classe fournit une interface TimeAnimator.ITimeListener qui peut notifier une application chaque fois qu’une image change dans une animation. Par exemple, considérez l’implémentation suivante de TimeAnimator.ITimeListener:

class MyTimeListener : Java.Lang.Object,  TimeAnimator.ITimeListener
{
    public void OnTimeUpdate(TimeAnimator animation, long totalTime, long deltaTime)
    {
        Log.Debug("Activity1", "totalTime={0}, deltaTime={1}", totalTime, deltaTime);
    }
}

Et maintenant pour utiliser la classe, une instance d’est TimeAnimator créée et l’écouteur est défini :

var animator = new TimeAnimator();
animator.SetTimeListener(new MyTimeListener());
animator.Start();

À mesure que l’instance TimeAnimator est en cours d’exécution, elle appelle ITimeAnimator.ITimeListener, qui journalisera ensuite la durée d’exécution de l’animateur et la durée pendant laquelle elle a été appelée depuis la dernière fois que la méthode a été appelée.

Navigation dans la pile d’applications

Android 4.1 améliore la navigation de la pile des applications introduite dans Android 3.0. En spécifiant la ParentName propriété du ActivityAttribute, Android peut ouvrir l’activité parente appropriée lorsque l’utilisateur appuie sur le bouton Haut dans la barre d’action . Android instancie l’activité spécifiée par la ParentName propriété. Cela permet aux applications de conserver la hiérarchie des activités qui effectuent une tâche donnée.

Pour la plupart des applications définissant l’activité ParentName , il suffit d’informations pour Qu’Android fournisse le comportement approprié pour naviguer dans la pile des applications ; Android synthétise la pile arrière nécessaire en créant une série d’intentions pour chaque activité parente. Toutefois, étant donné qu’il s’agit d’une pile d’applications artificielle, chaque activité synthétique n’aura pas l’état enregistré qu’une activité naturelle aurait. Pour fournir un état enregistré à une activité parente synthétique, une activité peut remplacer la OnPrepareNavigationUpTaskStack méthode. Cette méthode reçoit une instance qui aura une TaskStackBuilder collection d’objets Intent que Android utilisera pour créer la pile arrière. L’activité peut modifier ces intentions afin que, à mesure que l’activité synthétique est créée, elle recevra les informations d’état appropriées.

Pour les scénarios plus complexes, il existe de nouvelles méthodes sur la classe Activity qui peuvent être utilisées pour gérer le comportement de la navigation haut et construire la pile arrière :

  • OnNavigateUp : en substituant cette méthode, il est possible d’effectuer une action personnalisée lorsque le bouton Haut est enfoncé.
  • NavigateUpTo : l’appel de cette méthode entraîne l’accès de l’application de l’activité actuelle à l’activité spécifiée par une intention donnée.
  • ParentActivityIntent : permet d’obtenir une intention qui lance l’activité parente de l’activité actuelle.
  • ShouldUpRecreateTask : cette méthode permet d’interroger si la pile arrière synthétique doit être créée pour accéder à une activité parente. Retourne true si la pile synthétique doit être créée.
  • FinishAffinity : l’appel de cette méthode termine l’activité actuelle et toutes les activités ci-dessous dans la tâche actuelle qui ont la même affinité de tâche.
  • OnCreateNavigateUpTaskStack : cette méthode est substituée lorsqu’il est nécessaire d’avoir un contrôle total sur la façon dont la pile synthétique est créée.

Appareil photo

Il existe une nouvelle interface, Camera.IAutoFocusMoveCallbackqui peut être utilisée pour détecter le démarrage ou l’arrêt du déplacement automatique. Vous trouverez un exemple de cette nouvelle interface dans l’extrait de code suivant :

public class AutoFocusCallbackActivity : Activity, Camera.IAutoFocusCallback
{
    public void OnAutoFocus(bool success, Camera camera)
    {
        // camera is an instance of the camera service object.

        if (success)
        {
            // Auto focus was successful - do something here.
        }
        else
        {
            // Auto focus didn't happen for some reason - react to that here.
        }
    }
}

La nouvelle classe MediaActionSound fournit un ensemble d’API permettant de produire des sons pour les différentes actions multimédias. Il existe plusieurs actions qui peuvent se produire avec une caméra, celles-ci sont définies par l’énumération Android.Media.MediaActionSoundType:

  • MediaActionSoundType.FocusComplete - Ce son qui est joué lorsque le focus est terminé.
  • MediaActionSoundType.ShutterClick - Ce son sera lu lorsqu’une image toujours est prise.
  • MediaActionSoundType.StartVideoRecording : ce son est utilisé indique le début de l’enregistrement vidéo.
  • MediaActionSoundType.StopVideoRecording : ce son sera lu pour indiquer la fin de l’enregistrement vidéo.

Voici un exemple d’utilisation de la MediaActionSound classe dans l’extrait de code suivant :

var mediaActionPlayer = new MediaActionSound();

// Preload the sound for a shutter click.
mediaActionPlayer.Load(MediaActionSoundType.ShutterClick);
var button = FindViewById<Button>(Resource.Id.MyButton);

// Play the sound on a button click.
button.Click += (sender, args) => mediaActionPlayer.Play(MediaActionSoundType.ShutterClick);

// This releases the preloaded resources. Don’t make any calls on
// mediaActionPlayer after this.
mediaActionPlayer.Release();

Connectivité

Android Beam

Android Beam est une technologie NFC qui permet à deux appareils Android de communiquer entre eux. Android 4.1 offre une meilleure prise en charge du transfert de fichiers volumineux. Lorsque vous utilisez la nouvelle méthode NfcAdapter.SetBeamPushUris() , Android bascule entre d’autres mécanismes de transport (comme Bluetooth) pour obtenir une vitesse de transfert rapide.

Découverte des services réseau

Android 4.1 contient de nouvelles API pour la découverte de service dns multidiffusion. Cela permet à une application de détecter et de se connecter via le Wi-Fi à d’autres appareils tels que les imprimantes, les caméras et les appareils multimédias. Ces nouvelles API se trouvent dans le Android.Net.Nsd package.

Pour créer un service qui peut être consommé par d’autres services, la NsdServiceInfo classe est utilisée pour créer un objet qui définit les propriétés d’un service. Cet objet est ensuite fourni NsdManager.RegisterService() avec une implémentation de NsdManager.ResolveListener. Les implémentations de NsdManager.ResolveListener sont utilisées pour notifier une inscription réussie et annuler l’inscription du service.

Pour découvrir les services sur le réseau et l’implémentation du Nsd.DiscoveryListener passage à NsdManager.discoverServices().

Utilisation du réseau

Une nouvelle méthode ConnectivityManager.IsActiveNetworkMetered permet à un appareil de case activée s’il est connecté à un réseau limité. Cette méthode peut être utilisée pour aider à gérer l’utilisation des données en informant avec précision les utilisateurs qu’il peut y avoir des frais coûteux pour les opérations de données.

Découverte du service direct WiFi

La WifiP2pManager classe a été introduite dans Android 4.0 pour prendre en charge zeroconf. Zeroconf (réseau de configuration zéro) est un ensemble de techniques qui permettent aux appareils (ordinateurs, imprimantes, téléphones) de se connecter automatiquement aux réseaux, avec l’intervention d’opérateurs de réseau humains ou de serveurs de configuration spéciaux.

Dans Jelly Bean, WifiP2pManager vous pouvez découvrir des appareils à proximité à l’aide de Bonjour ou Upnp. Bonjour est l’implémentation de zeroconf d’Apple. Upnp est un ensemble de protocoles réseau qui prennent également en charge zeroconf. Les méthodes suivantes ont été ajoutées pour prendre en charge la WiFiP2pManager découverte du service Wi-Fi :

  • AddLocalService() : cette méthode est utilisée pour annoncer une application en tant que service via le Wi-Fi pour la découverte par les pairs.
  • AddServiceRequest( ) : cette méthode consiste à envoyer une demande de découverte de service à l’infrastructure. Il est utilisé pour initialiser la découverte du service Wi-Fi.
  • SetDnsSdResponseListeners() : cette méthode permet d’inscrire des rappels à appeler lors de la réception d’une réponse aux demandes de découverte de Bonjour.
  • SetUpnpServiceResponseListener() : cette méthode permet d’inscrire des rappels à appeler lors de la réception d’une réponse aux demandes de découverte Upnp.

Fournisseurs de contenu

La ContentResolver classe a reçu une nouvelle méthode. AcquireUnstableContentProvider Cette méthode permet à une application d’acquérir un fournisseur de contenu « instable ». Normalement, lorsqu’une application acquiert un fournisseur de contenu et que ce fournisseur de contenu se bloque, l’application sera donc bloquée. Avec cet appel de méthode, une application ne se bloque pas si le fournisseur de contenu se bloque. Au lieu de cela, Android.OS.DeadObjectionException des appels sont émis sur le fournisseur de contenu pour informer une application que le fournisseur de contenu a disparu. Un fournisseur de contenu « instable » est utile lors de l’interaction avec les fournisseurs de contenu d’autres applications. Il est moins probable que le code buggy d’une autre application affecte une autre application.

Copier et coller avec des intentions

La Intent classe peut maintenant avoir un ClipData objet associé à celui-ci via la Intent.ClipData propriété. Cette méthode permet de transmettre des données supplémentaires du Presse-papiers avec l’intention. Une instance de ClipData peut contenir un ou plusieurs ClipData.Item. ClipData.Itemsont des éléments des types suivants :

  • Texte : il s’agit d’une chaîne de texte, html ou chaîne dont le format est pris en charge par les étendues de style Android intégrées.
  • Intention : n’importe quel Intent objet.
  • URI : il peut s’agir de n’importe quel URI, tel qu’un signet HTTP ou l’URI d’un fournisseur de contenu.

Services isolés

Un service isolé est un service qui s’exécute sous son propre processus spécial et qui n’a pas d’autorisations propres. La seule communication avec le service est lors du démarrage du service et de sa liaison via l’API de service. Il est possible de déclarer un service isolé en définissant la propriété IsolatedProcess="true" dans la ServiceAttribute classe de service qui orne une classe de service.

Média

La nouvelle Android.Media.MediaCodec classe fournit une API aux codecs multimédias de bas niveau. Les applications peuvent interroger le système pour savoir quels codecs de bas niveau sont disponibles sur l’appareil.

Les nouvelles Android.Media.Audiofx.AudioEffect sous-classes ont été ajoutées pour prendre en charge le prétraitement audio supplémentaire sur l’audio capturé :

  • Android.Media.Audiofx.AcousticEchoCanceler : cette classe est utilisée pour le prétraitement audio pour supprimer le signal d’un tiers distant d’un signal audio capturé. Par exemple, en supprimant l’écho d’une application de communication vocale.
  • Android.Media.Audiofx.AutomaticGainControl : cette classe est utilisée pour normaliser le signal capturé en augmentant ou en réduisant un signal d’entrée afin que le signal de sortie soit constant.
  • Android.Media.Audiofx.NoiseSuppressor : cette classe supprime le bruit d’arrière-plan du signal capturé.

Tous les appareils ne prennent pas en charge ces effets. La méthode AudioEffect.IsAvailable doit être appelée par une application pour voir si l’effet audio en question est pris en charge sur l’appareil exécutant l’application.

La MediaPlayer classe prend désormais en charge la lecture sans lacune avec la SetNextMediaPlayer() méthode. Cette nouvelle méthode spécifie le prochain MediaPlayer à démarrer lorsque le lecteur multimédia actuel termine sa lecture.

Les nouvelles classes suivantes fournissent des mécanismes et une interface utilisateur standard pour sélectionner l’emplacement de lecture du média :

  • MediaRouter : cette classe permet aux applications de contrôler le routage des canaux multimédias d’un appareil vers des haut-parleurs externes ou d’autres appareils.
  • MediaRouterActionProvider et MediaRouteButton : ces classes permettent de fournir une interface utilisateur cohérente pour la sélection et la lecture de supports.

Notifications

Android 4.1 permet aux applications de plus en plus de flexibilité et de contrôle avec l’affichage des notifications. Les applications peuvent désormais afficher des notifications plus volumineuses et plus performantes pour les utilisateurs. Une nouvelle méthode NotificationBuilder.SetStyle() permet de définir l’un des trois nouveaux styles sur les notifications :

  • Notification.BigPictureStyle : il s’agit d’une classe d’assistance qui génère des notifications qui auront une image dans celles-ci. L’image suivante montre un exemple de notification avec une grande image :

Exemple de capture d’écran d’une notification BigPictureStyle

  • Notification.BigTextStyle – Il s’agit d’une classe d’assistance qui génère des notifications qui auront plusieurs lignes de texte, telles que l’e-mail. Vous trouverez un exemple de ce nouveau style de notification dans la capture d’écran suivante :

Exemple de capture d’écran d’une notification BigTextStyle

  • Notification.InboxStyle – Il s’agit d’une classe d’assistance qui génère des notifications qui contiennent une liste de chaînes, telles que des extraits de code d’un message électronique, comme illustré dans cette capture d’écran :

Exemple de capture d’écran d’une notification Notification.InboxStyle

Il est possible d’ajouter jusqu’à deux boutons d’action en bas d’un message de notification lorsque la notification utilise le style normal ou supérieur. Vous trouverez un exemple dans la capture d’écran suivante, où les boutons d’action sont visibles en bas de la notification :

Exemple de capture d’écran des boutons d’action affichés sous un message de notification

La Notification classe a reçu de nouvelles constantes qui permettent à un développeur de spécifier l’un des cinq niveaux de priorité d’une notification. Ceux-ci peuvent être définis sur une notification à l’aide de la Priority propriété.

Autorisations

Les nouvelles autorisations suivantes ont été ajoutées :

  • READ_EXTERNAL_STORAGE - L’application nécessite un accès en lecture seule au stockage externe. Actuellement, toutes les applications disposent d’un accès en lecture par défaut, mais les futures versions d’Android nécessitent l’accès en lecture explicitement aux applications.
  • READ_USER_DICTIONARY - Autorise un accès en lecture au dictionnaire de mots de l’utilisateur.
  • READ_CALL_LOG - Permet à une application d’obtenir des informations sur les appels entrants et sortants en lisant le journal des appels.
  • WRITE_CALL_LOG - Permet à une application d’écrire dans le journal des appels sur le téléphone.
  • WRITE_USER_DICTIONARY - Permet à une application d’écrire dans le dictionnaire de mots de l’utilisateur.

Modification importante de la note READ_EXTERNAL_STORAGE : actuellement, cette autorisation est automatiquement accordée par Android. Les futures versions d’Android nécessitent une application pour demander cette autorisation avant d’accorder l’autorisation.

Résumé

Cet article a présenté certaines des nouvelles API disponibles dans Android 4.1 (niveau d’API 16). Il a mis en évidence certaines modifications pour les animations et l’animation du lancement d’une activité, et a introduit les nouvelles API pour la découverte réseau d’autres appareils à l’aide de protocoles tels que Bonjour ou UPnP. D’autres modifications apportées à l’API ont également été mises en surbrillance, telles que la possibilité de couper et coller des données via des intentions, la possibilité d’utiliser des services isolés ou des fournisseurs de contenu « instables ».

Cet article a ensuite présenté les mises à jour des notifications, et a abordé certaines des nouvelles autorisations introduites avec Android 4.1