Torcia indipendente dalla fotocameraCamera-independent Flashlight

Questo articolo illustra come accedere alla luce del dispositivo e come usarla, se presente.This article shows how to access and use a device's lamp, if one is present. Questa funzionalità viene gestita separatamente dalle funzionalità di fotocamera e flash del dispositivo.Lamp functionality is managed separately from the device's camera and camera flash functionality. Oltre a fornire informazioni di riferimento sulla luce e sulla regolazione delle relative impostazioni, questo articolo descrive anche come liberare correttamente la risorsa luce quando non è in uso e come rilevare le modifiche di disponibilità della luce nel caso in cui sia usata da un'altra app.In addition to acquiring a reference to the lamp and adjusting its settings, this article also shows you how to properly free up the lamp resource when it's not in use, and how to detect when the lamp's availability changes in case it is being used by another app.

Ottenere la funzionalità luce predefinita del dispositivoGet the device's default lamp

Per ottenere il dispositivo Lamp predefinito di un dispositivo, chiamare lamp. GetDefaultAsync.To get a device's default lamp device, call Lamp.GetDefaultAsync. Le API per la luce si trovano nello spazio dei nomi Windows.Devices.Lights.The lamp APIs are found in the Windows.Devices.Lights namespace. Assicurati di aggiungere una direttiva using per questo spazio dei nomi prima di tentare di accedere a queste API.Be sure to add a using directive for this namespace before attempting to access these APIs.

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

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

Se l'oggetto restituito è null, l'API Lamp non è supportata nel dispositivo.If the returned object is null, the Lamp API is unsupported on the device. Alcuni dispositivi potrebbero non supportare l'API Lamp anche se è fisicamente presente una luce nel dispositivo.Some devices may not support the Lamp API even if there is a lamp physically present on the device.

Ottenere una luce specifica con la stringa del selettore di luceGet a specific lamp using the lamp selector string

Alcuni dispositivi possono disporre di più di una luce.Some devices may have more than one lamp. Per ottenere un elenco delle luci disponibili nel dispositivo, recupera la stringa del selettore di dispositivo chiamando GetDeviceSelector.To obtain a list of lamps available on the device, get the device selector string by calling GetDeviceSelector. Questa stringa del selettore può quindi essere passata a DeviceInformation. findAllAsync.This selector string can then be passed into DeviceInformation.FindAllAsync. Questo metodo viene usato per enumerare i diversi tipi di dispositivi e la stringa del selettore indica al metodo di restituire solo i dispositivi con la funzionalità luce.This method is used to enumerate many different kinds of devices and the selector string lets the method know to return only lamp devices. L'oggetto DeviceInformationCollection restituito da FindAllAsync è una raccolta di oggetti DeviceInformation che rappresentano le luci disponibili nel dispositivo.The DeviceInformationCollection object returned from FindAllAsync is a collection of DeviceInformation objects representing the lamps available on the device. Selezionare uno degli oggetti nell'elenco e quindi passare la proprietà ID a lamp. FromIdAsync per ottenere un riferimento alla lampada richiesta.Select one of the objects in the list and then pass the Id property to Lamp.FromIdAsync to get a reference to the requested lamp. Questo esempio usa il metodo di estensione GetFirstOrDefault dello spazio dei nomi System.Linq per selezionare l'oggettoDeviceInformation dove la proprietà EnclosureLocation.Panel ha un valore di Back, che consente di selezionare una luce nella parte posteriore del dispositivo, se presente.This example uses the GetFirstOrDefault extension method from the System.Linq namespace to select the DeviceInformation object where the EnclosureLocation.Panel property has a value of Back, which selects a lamp that is on the back of the device's enclosure, if one exists.

Nota che le API DeviceInformation si trovano nello spazio dei nomi Windows.Devices.Enumeration.Note that the DeviceInformation APIs are found in the Windows.Devices.Enumeration namespace.

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);

Regolare le impostazioni di luceAdjust lamp settings

Dopo aver ottenuto un'istanza della classe Lamp, attiva la luce impostando la proprietà IsEnabled su true.After you have an instance of the Lamp class, turn the lamp on by setting the IsEnabled property to true.

lamp.IsEnabled = true;

Disattiva la luce impostando la proprietà IsEnabled su false.Turn the lamp off by setting the IsEnabled property to false.

lamp.IsEnabled = false;

Alcuni dispositivi hanno luci che supportano i valori di colore.Some devices have lamps that support color values. Controllare se una lampada supporta il colore controllando la proprietà IsColorSettable .Check if a lamp supports color by checking the IsColorSettable property. Se questo valore è true, puoi impostare il colore della luce con la proprietà Color.If this value is true, you can set the color of the lamp with the Color property.

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

Registrarsi per ricevere una notifica se cambia la disponibilità della luceRegister to be notified if the lamp availability changes

L'accesso alla funzionalità luce è concesso all'app più recente che ne richiede l'accesso.Lamp access is granted to the most recent app to request access. Pertanto, se un'altra app viene avviata e richiede una risorsa luce attualmente usata dalla tua app, l'app non sarà più in grado di controllare la luce finché l'altra app non ha rilasciato la risorsa.So, if another app is launched and requests a lamp resource that your app is currently using, your app will no longer be able to control the lamp until the other app has released the resource. Per ricevere una notifica quando la disponibilità della lampada cambia, registrare un gestore per l'evento lamp. AvailabilityChanged .To receive a notification when the availability of the lamp changes, register a handler for the Lamp.AvailabilityChanged event.

lamp = await Lamp.GetDefaultAsync();

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

lamp.AvailabilityChanged += Lamp_AvailabilityChanged;

Nel gestore dell'evento controlla la proprietà LampAvailabilityChanged.IsAvailable per determinare se la luce è disponibile.In the handler for the event, check the LampAvailabilityChanged.IsAvailable property to determine if the lamp is available. In questo esempio, un interruttore per l'accensione e lo spegnimento della luce viene abilitato o disabilitato in base alla disponibilità della luce.In this example, a toggle switch for turning the lamp on and off is enabled or disabled based on the lamp availability.

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

Eliminare correttamente la risorsa luce quando non è in usoProperly dispose of the lamp resource when not in use

Quando la luce non viene più usata, devi disabilitarla e chiamare Lamp.Close per rilasciare la risorsa e consentire alle altre app di accedere alla luce.When you are no longer using the lamp, you should disable it and call Lamp.Close to release the resource and allow other apps to access the lamp. Questa proprietà è mappata al metodo Dispose se usi C#.This property is mapped to the Dispose method if you are using C#. Se hai effettuato la registrazione per AvailabilityChanged, annulla la registrazione del gestore quando rilasci la risorsa luce.If you registered for the AvailabilityChanged, you should unregister the handler when you dispose of the lamp resource. La posizione giusta nel codice per rilasciare la risorsa luce dipende dall'app.The right place in your code to dispose of the lamp resource depends on your app. Per definire l'ambito di accesso alla luce per una singola pagina, rilascia la risorsa nell'evento OnNavigatingFrom.To scope lamp access to a single page, release the resource in the OnNavigatingFrom event.

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