Lampe torche indépendante de l’appareil photo

Cet article explique comment accéder à la lampe d’un appareil et l’utiliser, le cas échéant. La fonctionnalité de lampe est gérée indépendamment des fonctionnalités de flash et d’appareil photo. Outre l’acquisition d’une référence à la lampe et l’ajustement de ses paramètres, cet article vous montre également comment libérer correctement la ressource de lampe lorsqu’elle n’est pas utilisée et comment détecter quand la disponibilité de la lampe change en cas d’utilisation par une autre application.

Obtenir la lampe par défaut de l’appareil

Pour obtenir l’appareil lamp par défaut d’un appareil, appelez Lamp.GetDefaultAsync. Les API de lampe se trouvent dans l’espace de noms Windows.Devices.Lights . Veillez à ajouter une directive using pour cet espace de noms avant de tenter d’accéder à ces API.

using Windows.Devices.Lights;
Lamp lamp;
lamp = await Lamp.GetDefaultAsync();

if (lamp == null)
{
    ShowErrorMessage("No Lamp device found");
    return;
}

Si l’objet retourné est null, l’API Lamp n’est pas prise en charge sur l’appareil. Certains appareils peuvent ne pas prendre en charge l’API Lamp même s’il existe une lampe physiquement présente sur l’appareil.

Obtenir une lampe spécifique à l’aide de la chaîne de sélecteur de lampe

Certains appareils peuvent avoir plusieurs lampes. Pour obtenir la liste des lampes disponibles sur l’appareil, obtenez la chaîne de sélecteur d’appareil en appelant GetDeviceSelector. Cette chaîne de sélecteur peut ensuite être transmise à DeviceInformation.FindAllAsync. Cette méthode est utilisée pour énumérer de nombreux types d’appareils différents et la chaîne de sélecteur permet à la méthode de savoir pour retourner uniquement les appareils de lampe. L’objet DeviceInformationCollection retourné par FindAllAsync est une collection d’objets DeviceInformation représentant les lampes disponibles sur l’appareil. Sélectionnez l’un des objets de la liste, puis passez la propriété Id à Lamp.FromIdAsync pour obtenir une référence à la lampe demandée. Cet exemple utilise la méthode d’extension GetFirstOrDefault à partir de l’espace de noms System.Linq pour sélectionner l’objet DeviceInformation où la propriété EnclosureLocation.Panel a la valeur Back, qui sélectionne une lampe à l’arrière du boîtier de l’appareil, le cas échéant.

Notez que les API DeviceInformation se trouvent dans l’espace de noms Windows.Devices.Enumeration.

using Windows.Devices.Enumeration;
using System.Linq;
string selectorString = Lamp.GetDeviceSelector();


DeviceInformationCollection devices = await DeviceInformation.FindAllAsync(selectorString);

DeviceInformation deviceInfo =
    devices.FirstOrDefault(di => di.EnclosureLocation != null && 
        di.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Back);

if (deviceInfo == null)
{
    ShowErrorMessage("No Lamp device found");
}

lamp = await Lamp.FromIdAsync(deviceInfo.Id);

Ajuster les paramètres de la lampe

Une fois que vous avez une instance de la classe Lamp, activez la lampe en définissant la propriété IsEnabled sur true.

lamp.IsEnabled = true;

Désactivez la lampe en définissant la propriété IsEnabled sur false.

lamp.IsEnabled = false;

Certains appareils ont des lampes qui prennent en charge les valeurs de couleur. Vérifiez si une lampe prend en charge la couleur en vérifiant la propriété IsColorSettable. Si cette valeur est true, vous pouvez définir la couleur de la lampe avec la propriété Color .

if (lamp.IsColorSettable)
{
    lamp.Color = Windows.UI.Colors.Blue;
}

S’inscrire pour être averti si la disponibilité de la lampe change

L’accès lamp est accordé à l’application la plus récente pour demander l’accès. Par conséquent, si une autre application est lancée et demande une ressource lamp que votre application utilise actuellement, votre application ne pourra plus contrôler la lampe tant que l’autre application n’a pas libéré la ressource. Pour recevoir une notification lorsque la disponibilité de la lampe change, inscrivez un gestionnaire pour l’événement Lamp.AvailabilityChanged .

lamp = await Lamp.GetDefaultAsync();

if (lamp == null)
{
    ShowErrorMessage("No Lamp device found");
    return;
}

lamp.AvailabilityChanged += Lamp_AvailabilityChanged;

Dans le gestionnaire de l’événement, vérifiez la propriété LampAvailabilityChanged.IsAvailable pour déterminer si la lampe est disponible. Dans cet exemple, un commutateur bascule pour activer et désactiver la lampe est activé ou désactivé en fonction de la disponibilité de la lampe.

private void Lamp_AvailabilityChanged(Lamp sender, LampAvailabilityChangedEventArgs args)
{
    lampToggleSwitch.IsEnabled = args.IsAvailable;
}

Supprimer correctement la ressource de lampe lorsqu’elle n’est pas utilisée

Lorsque vous n’utilisez plus la lampe, vous devez la désactiver et appeler Lamp.Close pour libérer la ressource et autoriser d’autres applications à accéder à la lampe. Cette propriété est mappée à la méthode Dispose si vous utilisez C#. Si vous êtes inscrit pour AvailabilityChanged, vous devez annuler l’inscription du gestionnaire lorsque vous supprimez la ressource lamp. L’emplacement approprié dans votre code pour supprimer la ressource lamp dépend de votre application. Pour étendre l’accès à une lampe à une seule page, relâchez la ressource dans l’événement OnNavigatingFrom .

protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
    lamp.AvailabilityChanged -= Lamp_AvailabilityChanged;
    lamp.IsEnabled = false;
    lamp.Dispose();
    lamp = null;
}